您的位置:首页 > 博客中心 > 数据库 >

SQL Server 中的三种分页方式

时间:2022-03-10 17:59

DECLARE @page_size INT = 20;
DECLARE @page_index INT = 3;
WITH ID_List AS
(
    SELECT TOP (@page_size * @page_index) ID FROM ClassB 
    WHERE CreateDate BETWEEN ‘2014-07-13‘ AND ‘2014-07-14‘ 
    ORDER BY CreateDate DESC, ID DESC
)
,ID_List_Current AS
(
    SELECT ID FROM ID_List WHERE ID NOT IN(SELECT TOP (@page_size * (@page_index - 1)) ID FROM ID_List)
)
SELECT * FROM ClassB WHERE ID IN (SELECT ID FROM ID_List_Current);

表 ‘ClassB‘。扫描计数 2,逻辑读取 52 次,物理读取 0 次,预读 0 次,lob 逻辑读取 0 次,lob 物理读取 0 次,lob 预读 0 次。

查询第30页的数据仅比查询第3页的数据多出两次逻辑读取,方案C和B的唯一在于:子查询中的查询列,方案B中返回了所有字段,所有要通过聚集索引走lookup,而方案C直接返回索引键即可。

表 ‘ClassB‘。扫描计数 2,逻辑读取 54 次,物理读取 0 次,预读 0 次,lob 逻辑读取 0 次,lob 物理读取 0 次,lob 预读 0 次。

SQL Server 中的三种分页方式,布布扣,bubuko.com

热门排行

今日推荐

热门手游