小编典典

在SQL Server中分页结果的最佳方法是什么

sql

如果您还希望获得结果总数(在进行分页之前),那么在SQL Server
2000、2005、2008、2012中对结果进行分页的最佳方法(从性能角度而言)是什么?


阅读 171

收藏
2021-05-05

共1个答案

小编典典

获取结果总数和分页是两个不同的操作。为了这个示例,我们假设您要处理的查询是

SELECT * FROM Orders WHERE OrderDate >= '1980-01-01' ORDER BY OrderDate

在这种情况下,您可以使用以下方法确定结果总数:

SELECT COUNT(*) FROM Orders WHERE OrderDate >= '1980-01-01'

…这看似效率低下,但假设所有索引等均已正确设置,实际上却表现不错。

接下来,要以分页的方式获取实际结果,以下查询将是最有效的:

SELECT  *
FROM    ( SELECT    ROW_NUMBER() OVER ( ORDER BY OrderDate ) AS RowNum, *
          FROM      Orders
          WHERE     OrderDate >= '1980-01-01'
        ) AS RowConstrainedResult
WHERE   RowNum >= 1
    AND RowNum < 20
ORDER BY RowNum

这将返回原始查询的第1-19行。这里最酷的事情是,尤其是对于Web应用程序,您无需保留任何状态,除了要返回的行号。

2021-05-05