sqlserver 三种分页方式性能比较[图文]
网络编程 2021-07-05 13:42www.168986.cn编程入门
第二种分页方法和第一种分页方法效率差不多,但第二种可用于老版本的sqlserver甚至aess,一种别用
Liwu_Items表,CreateTime列建立聚集索引
第一种,sqlserver2005特有的分页语法
declare @page int
declare @pagesize int
set @page = 2
set @pagesize = 12
SET STATISTICS IO on
SELECT a. FROM (
SELECT ROW_NUMBER() OVER (ORDER BY b.CreateTime DESC) AS [ROW_NUMBER], b.
FROM [dbo].[Liwu_Items] AS b ) AS a
WHERE a.[ROW_NUMBER] BETWEEN @pagesize + 1 AND (@page@pagesize)
ORDER BY a.[ROW_NUMBER]
结果
(12 行受影响)表 'Liwu_Items'。扫描计数 1,逻辑读取 7 次,物理读取 0 次,预读 0 次,lob 逻辑读取 0 次,lob 物理读取 0 次,lob 预读 0 次。
逻辑读是7次
declare @page int
declare @pagesize int
set @page = 2
set @pagesize = 12
SET STATISTICS IO on
select from (
select (@pagesize) from
(select (@page@pagesize) from Liwu_Items order by CreateTime desc) a
order by CreateTime asc) b
order by CreateTime desc
结果
(12 行受影响)表 'Liwu_Items'。扫描计数 1,逻辑读取 7 次,物理读取 0 次,预读 317 次,lob 逻辑读取 0 次,lob 物理读取 0 次,lob 预读 0 次。
执行计划
declare @page int
declare @pagesize int
set @page = 2
set @pagesize = 12
SET STATISTICS IO on
select (@pagesize) from Liwu_Items
where ItemId not in(
select ((@page-1)@pagesize) ItemId from Liwu_Items order by CreateTime desc)
order by CreateTime Desc
结果
(12 行受影响)表 'Worktable'。扫描计数 1,逻辑读取 70 次,物理读取 0 次,预读 0 次,lob 逻辑读取 0 次,lob 物理读取 0 次,lob 预读 0 次。表 'Liwu_Items'。扫描计数 2,逻辑读取 18 次,物理读取 0 次,预读 0 次,lob 逻辑读取 0 次,lob 物理读取 0 次,lob 预读 0 次。
性能最差,对两个表进行处理,逻辑读都很高,汗。
第一种,sqlserver2005特有的分页语法
代码如下:
declare @page int
declare @pagesize int
set @page = 2
set @pagesize = 12
SET STATISTICS IO on
SELECT a. FROM (
SELECT ROW_NUMBER() OVER (ORDER BY b.CreateTime DESC) AS [ROW_NUMBER], b.
FROM [dbo].[Liwu_Items] AS b ) AS a
WHERE a.[ROW_NUMBER] BETWEEN @pagesize + 1 AND (@page@pagesize)
ORDER BY a.[ROW_NUMBER]
结果
(12 行受影响)表 'Liwu_Items'。扫描计数 1,逻辑读取 7 次,物理读取 0 次,预读 0 次,lob 逻辑读取 0 次,lob 物理读取 0 次,lob 预读 0 次。
逻辑读是7次
执行计划
主要开销都在聚集索引扫描了。
第二种,用两个分别正序和倒序排列,共另个子查询来实现分页,
代码如下:
declare @page int
declare @pagesize int
set @page = 2
set @pagesize = 12
SET STATISTICS IO on
select from (
select (@pagesize) from
(select (@page@pagesize) from Liwu_Items order by CreateTime desc) a
order by CreateTime asc) b
order by CreateTime desc
结果
(12 行受影响)表 'Liwu_Items'。扫描计数 1,逻辑读取 7 次,物理读取 0 次,预读 317 次,lob 逻辑读取 0 次,lob 物理读取 0 次,lob 预读 0 次。
执行计划
执行计划和第一种差不多,但两个排序占的资源挺多的。
第三种,最垃圾的一种,用not in字句实现的,如下
代码如下:
declare @page int
declare @pagesize int
set @page = 2
set @pagesize = 12
SET STATISTICS IO on
select (@pagesize) from Liwu_Items
where ItemId not in(
select ((@page-1)@pagesize) ItemId from Liwu_Items order by CreateTime desc)
order by CreateTime Desc
结果
(12 行受影响)表 'Worktable'。扫描计数 1,逻辑读取 70 次,物理读取 0 次,预读 0 次,lob 逻辑读取 0 次,lob 物理读取 0 次,lob 预读 0 次。表 'Liwu_Items'。扫描计数 2,逻辑读取 18 次,物理读取 0 次,预读 0 次,lob 逻辑读取 0 次,lob 物理读取 0 次,lob 预读 0 次。
性能最差,对两个表进行处理,逻辑读都很高,汗。
执行计划
这执行计划都看不懂,嵌套循环和表假脱机占了很大的资源。
:第二种分页方法和第一种分页方法效率差不多,但第二种可用于老版本的sqlserver甚至aess,一种别用。
编程语言
- 如何快速学会编程 如何快速学会ug编程
- 免费学编程的app 推荐12个免费学编程的好网站
- 电脑怎么编程:电脑怎么编程网咯游戏菜单图标
- 如何写代码新手教学 如何写代码新手教学手机
- 基础编程入门教程视频 基础编程入门教程视频华
- 编程演示:编程演示浦丰投针过程
- 乐高编程加盟 乐高积木编程加盟
- 跟我学plc编程 plc编程自学入门视频教程
- ug编程成航林总 ug编程实战视频
- 孩子学编程的好处和坏处
- 初学者学编程该从哪里开始 新手学编程从哪里入
- 慢走丝编程 慢走丝编程难学吗
- 国内十强少儿编程机构 中国少儿编程机构十强有
- 成人计算机速成培训班 成人计算机速成培训班办
- 孩子学编程网上课程哪家好 儿童学编程比较好的
- 代码编程教学入门软件 代码编程教程