Sql server 较旧的行号()和较新的偏移量+;SQL Server中基于获取的分页?
在SQL Server 2012提供的较旧的行_编号(SQL Server 2008)和较新的OFFSET+FETCH(SQL Server 2012)分页机制方面,我没有什么问题Sql server 较旧的行号()和较新的偏移量+;SQL Server中基于获取的分页?,sql-server,sql-server-2008,sql-server-2005,sql-server-2012,Sql Server,Sql Server 2008,Sql Server 2005,Sql Server 2012,在SQL Server 2012提供的较旧的行_编号(SQL Server 2008)和较新的OFFSET+FETCH(SQL Server 2012)分页机制方面,我没有什么问题 row_number()有哪些限制 OFFSET+FETCH是行号()的改进替代品吗 是否有任何用例只能使用其中一个而不能使用另一个 两者之间有什么性能差异吗?如果是,推荐哪一种 谢谢。使用ROW\u NUMBER()效果很好-只是需要做的工作太多了;您需要围绕实际查询编写一个“骨架”CTE,将ROW\u NUMBE
ROW\u NUMBER()
效果很好-只是需要做的工作太多了;您需要围绕实际查询编写一个“骨架”CTE,将ROW\u NUMBER()
列添加到输出集中,然后对其进行筛选
使用新的OFFSET/FETCH
更简单-是的,它的性能也更好,因为这两个链接可以向您展示:
总之:如果您使用的是SQL Server 2012,那么您肯定应该使用
OFFSET/FETCH
而不是ROW\u NUMBER()
进行分页我发现这篇文章介绍了三种分页技术,并在图表中比较了它们的结果。这可能有助于您决定采用哪种方法
讨论的所有分页方法都适用于较小数量的记录,但不适用于较大数量的数据。根据定义,行数是在运行查询时计算的临时值
OFFSET/FETCH
是一个选项,您可以为ORDER BY
子句指定该选项
就速度而言,它们都能获得很好的性能,每个方法之间的差异取决于SELECT
子句中指定的列以及表中的索引
在以下两个示例中,您可以看到这两种方法之间的差异:
1。偏移/提取速度更快时的情况:
SELECT
Id
FROM Orders
ORDER BY
Id
OFFSET 50000 ROWS FETCH NEXT 5000 ROWS ONLY
SELECT
A.Id
FROM
(
SELECT
Id,
ROW_NUMBER() OVER (ORDER BY Id) AS RowNumber FROM Orders
) AS A
WHERE
A.RowNumber BETWEEN 50001 AND 55000
SELECT
*
FROM Orders
ORDER BY
Id
OFFSET 50000 ROWS FETCH NEXT 5000 ROWS ONLY
SELECT
A.*
FROM
(
SELECT
*,
ROW_NUMBER() OVER (ORDER BY Id) AS RowNumber FROM Orders
) AS A
WHERE
A.RowNumber BETWEEN 50001 AND 55000
2。行数()更快时的情况:
SELECT
Id
FROM Orders
ORDER BY
Id
OFFSET 50000 ROWS FETCH NEXT 5000 ROWS ONLY
SELECT
A.Id
FROM
(
SELECT
Id,
ROW_NUMBER() OVER (ORDER BY Id) AS RowNumber FROM Orders
) AS A
WHERE
A.RowNumber BETWEEN 50001 AND 55000
SELECT
*
FROM Orders
ORDER BY
Id
OFFSET 50000 ROWS FETCH NEXT 5000 ROWS ONLY
SELECT
A.*
FROM
(
SELECT
*,
ROW_NUMBER() OVER (ORDER BY Id) AS RowNumber FROM Orders
) AS A
WHERE
A.RowNumber BETWEEN 50001 AND 55000
你查过了吗?看到这个相当全面的答案:这看起来很诚实,但我想知道如何强制EF使用2012 sql server的集合?我有几个理由不同意你们的结论,这并不像你说的那么简单:你提到的第一个链接没有做任何性能比较:我不打算就此得出任何结论,因为我没有在这里做任何彻底的测试。第二个链接没有提到执行测试的行数,并且偏移量/获取方法很容易在大型表中表现不佳(请参见此处)@lcfd:mssqlgirl的文章没有将偏移量/获取与行数进行比较:它只将其与涉及按已知、唯一、索引排序的技术进行比较,连续ID字段。这不适用于许多现实情况。