小编典典

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

all

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


阅读 176

收藏
2022-03-09

共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 行。这里很酷的事情,尤其是对于网络应用程序,是您不必保留任何状态,除了要返回的行号。

2022-03-09