常用SQL Server分页方式

 

假设有表ARTICLE,字段ID、YEAR...(其他省略),数据53210条(客户真实数据,量不大),分页查询每页30条,查询第1500页(即第45001-45030条数据),字段ID聚集索引,YEAR无索引,Sqlserver版本:2008R2

第一种方案、最简单、普通的方法:

SELECT TOP 30 *
  FROM [ARTICLE]
 WHERE ID NOT IN ( SELECT TOP 45000 ID
                     FROM [ARTICLE]
                    ORDER BY YEAR DESC
                             ,ID DESC )
 ORDER BY YEAR DESC
          ,ID DESC 

第二种方案:

复制代码
SELECT *
  FROM( SELECT TOP 30 *
          FROM ( SELECT TOP 45030 *
                   FROM ARTICLE
                  ORDER BY YEAR DESC
                           ,ID DESC ) f
         ORDER BY f.YEAR ASC
                  ,f.ID DESC ) s
 ORDER BY s.YEAR DESC
          ,s.ID DESC 
复制代码

第三种方案:

复制代码
SELECT *
  FROM ARTICLE w1
       ,( SELECT TOP 30 ID
            FROM ( SELECT TOP 50030 ID
                                    ,YEAR
                     FROM ARTICLE
                    ORDER BY YEAR DESC
                             ,ID DESC ) w
           ORDER BY w.YEAR ASC
                    ,w.ID ASC ) w2
 WHERE w1.ID = w2.ID
 ORDER BY w1.YEAR DESC
          ,w1.ID DESC 
复制代码

第四种方案:

复制代码
SELECT *
  FROM ARTICLE w1
 WHERE ID IN
       ( SELECT TOP 30 ID
           FROM ( SELECT TOP 45030 ID
                                   ,YEAR
                    FROM ARTICLE
                   ORDER BY YEAR DESC
                            ,ID DESC ) w
          ORDER BY w.YEAR ASC
                   ,w.ID ASC )
 ORDER BY w1.YEAR DESC
          ,w1.ID DESC 
复制代码

第五种方案:

复制代码
SELECT w2.n
       ,w1.*
  FROM ( SELECT TOP 50030 Row_number() OVER (ORDER BY YEAR DESC, ID DESC) n
                          ,ID
           FROM ARTICLE ) w2
       ,ARTICLE w1
 WHERE w1.ID = w2.ID
       AND w2.n > 50000
 ORDER BY w2.n ASC 
复制代码

在查询页数靠前时,效率3>4>5>2>1,页码靠后时5>4>3>1>2,再根据用户习惯,一般用户的检索只看最前面几页,因此选择3 4 5方案均可,若综合考虑方案5是最好的选择

posted @   xachary  阅读(173)  评论(0编辑  收藏  举报
编辑推荐:
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
点击右上角即可分享
微信分享提示