对于 SQL Server 2012 提供的较旧的 row_number (SQL Server 2008) 和较新的 OFFSET + FETCH (SQL Server 2012) 分页机制,我有几个问题。
- row_number() 有哪些限制?
- OFFSET + FETCH 是 row_number() 的改进替代品吗?
- 是否存在只能使用其中一种而无法满足另一种的用例?
- 两者之间有性能差异吗?如果是,推荐哪一种?
谢谢。
最佳答案
使用ROW_NUMBER()
效果很好——只是多了一些不必要的工作;您需要围绕实际查询编写一个“骨架”CTE,将 ROW_NUMBER()
列添加到输出集,然后对其进行过滤。
使用新的 OFFSET/FETCH
更简单 - 是的,它的性能也更好,正如这两个链接可以向您展示的那样:
总的来说:如果您使用 SQL Server 2012 - 那么您绝对应该使用OFFSET/FETCH
而不是ROW_NUMBER ()
用于分页
关于sql-server - SQL Server 中旧的 row_number() 和新的基于 OFFSET + FETCH 的分页之间有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16381803/