offset fetch 分页

SET STATISTICS IO ON
SET STATISTICS TIME ON
 
DECLARE @pageIndex INT=800,@pageSize INT=20
 
SELECT * FROM  Person.Person AS t
ORDER BY t.lastname 
OFFSET (@pageIndex-1)*@pageSize ROWS
FETCH NEXT @pageSize ROWS ONLY;
/*
---------- @pageIndex=1 ----------
(20 行受影响)
表 'Person'。扫描计数 1,逻辑读取 65 次,物理读取 0 次,预读 0 次,lob 逻辑读取 0 次,lob 物理读取 0 次,lob 预读 0 次。
 SQL Server 执行时间:
   CPU 时间 = 0 毫秒,占用时间 = 43 毫秒。
   
---------- @pageIndex=2 ----------
(20 行受影响)
表 'Person'。扫描计数 1,逻辑读取 125 次,物理读取 0 次,预读 0 次,lob 逻辑读取 0 次,lob 物理读取 0 次,lob 预读 0 次。
 SQL Server 执行时间:
   CPU 时间 = 0 毫秒,占用时间 = 106 毫秒。
---------- @pageIndex=800 ----------   
(20 行受影响)
表 'Person'。扫描计数 1,逻辑读取 49088 次,物理读取 0 次,预读 0 次,lob 逻辑读取 0 次,lob 物理读取 0 次,lob 预读 0 次。
 SQL Server 执行时间:
   CPU 时间 = 63 毫秒,占用时间 = 175 毫秒。

是我想说的是被好多人所不关注的一种分页方法:

select * from 表 order by id OFFSET PageIndex*pagenum ROWS FETCH next pagenumrows only

这种方法是不是很简单,但是这个只有在SQL Server 2012及以上版本中才能使用,无论是从逻辑读取数还是响应时间实际执行行数等关键参数看,SQL Server 2012提供的OFFSET/FETCH NEXT分页方式都比Row_Number()方式有了较大的提升。

注意:使用该方法必须使用order by ,不然会有语法错误。

SELECT * FROM Article_Admin ORDER BY ID DESC OFFSET (2-1)*10 ROWS FETCH NEXT 10 ROWS ONLY

(2-1)*10相当于 (pageIndex当前页码-1)*pageSize每页显示的条数

10相当于pageSize每页显示的条数

猜你喜欢

转载自blog.csdn.net/qmdweb/article/details/83380005