Harrison_2009 05月02日
数据分页效率问题--逻辑读取次数
在数据查询分析时逻辑读取次数到底反应了什么?多嵌套查询逻辑读取次数反而更少?
如在一个100W数据的表中执行分页查询,现写了几个sql,分别是用 2012后新增Offset,Fetch Next分页方式,以及2005新增的row_number,代码如下:

Declare @pageIndex int = 800;
Declare @pageSize int = 20;
-- 分页查询1
Select * From [order] Order By id asc Offset (@pageIndex-1)*@pageSize Rows Fetch Next @pageSize Rows Only
-- 分页查询2
SELECT * FROM [order] WHERE ID IN (
SELECT ID FROM (SELECT ID,ROW_NUMBER() OVER ( ORDER BY ID asc) AS num FROM [order]) AS settable
WHERE num BETWEEN (@pageIndex-1)*@pageSize + 1 AND @pageIndex*@pageSize )
-- 分页查询3
SELECT * FROM (SELECT ROW_NUMBER() OVER (ORDER BY id) AS rid,* FROM [order]) AS t
WHERE t.rid between (@pageIndex-1) * @pageSize+1 AND @pageIndex*@pageSize



(20 行受影响)
表“Order”。扫描计数 1,逻辑读取次数 1455,物理读取次数 0,页面服务器读取次数 0,预读读取次数 0,页面服务器预读读取次数 0,LOb 逻辑读取次数 0,LOB 逻辑读取次数 0,LOB 页面服务器读取次数 0,LOB 预读读取次数 0,LOB 页面服务器预读读取次数 0。

(20 行受影响)
表“Order”。扫描计数 1,逻辑读取次数 89,物理读取次数 0,页面服务器读取次数 0,预读读取次数 0,页面服务器预读读取次数 0,LOb 逻辑读取次数 0,LOB 逻辑读取次数 0,LOB 页面服务器读取次数 0,LOB 预读读取次数 0,LOB 页面服务器预读读取次数 0。

(20 行受影响)
表“Order”。扫描计数 1,逻辑读取次数 1543,物理读取次数 0,页面服务器读取次数 0,预读读取次数 0,页面服务器预读读取次数 0,LOb 逻辑读取次数 0,LOB 逻辑读取次数 0,LOB 页面服务器读取次数 0,LOB 预读读取次数 0,LOB 页面服务器预读读取次数 0。

...全文
103 点赞 收藏 3
写回复
3 条回复

还没有回复,快来抢沙发~

发动态
发帖子
疑难问题
创建于2007-09-28

9304

社区成员

12.1w+

社区内容

MS-SQL Server 疑难问题
社区公告
暂无公告