SQL SERVER - 2005 T-SQL 分页查询技术比较 (OVER 和 ROW_NUMBER()) - CTE 与派生表






1.80/5 (6投票s)
2007年6月17日

32980
SQL SERVER - 2005 T-SQL 分页查询技术比较 (OVER 和 ROW_NUMBER()) - CTE 与派生表
引言
我收到了一些关于我文章 SQL SERVER - T-SQL 分页查询技术比较 - SQL 2000 vs SQL 2005 的邮件和评论。主要问题是是否可以使用 CTE 实现? 当然可以! 性能如何? 性能相同! 请参考上述文章了解分页的历史。
SQL Server 2005 代码示例
SQL 2005 Paging Method Using Derived Table USE AdventureWorks GO DECLARE @StartRow INT DECLARE @EndRow INT SET @StartRow = 120 SET @EndRow = 140 SELECT FirstName, LastName, EmailAddress FROM ( SELECT PC.FirstName, PC.LastName, PC.EmailAddress, ROW_NUMBER() OVER(Order BY PC.FirstName, PC.LastName,PC.ContactID) AS RowNumber FROM Person.Contact PC) PersonContact WHERE RowNumber > @StartRow AND RowNumber < @EndRow ORDER BY FirstName, LastName, EmailAddress GO SQL 2005 Paging Method Using CTE USE AdventureWorks GO DECLARE @StartRow INT DECLARE @EndRow INT SET @StartRow = 120; SET @EndRow = 140; WITH PersonContact AS ( SELECT PC.FirstName, PC.LastName, PC.EmailAddress, ROW_NUMBER() OVER(Order BY PC.FirstName, PC.LastName,PC.ContactID) AS RowNumber FROM Person.Contact PC) SELECT FirstName, LastName, EmailAddress FROM PersonContact WHERE RowNumber > @StartRow AND RowNumber < @EndRow ORDER BY FirstName, LastName, EmailAddress GO
以下执行计划图像显示,在同一批次中,两者的性能是相同的。但这在存在复杂查询时可能不成立。大多数情况下,它们会是相同的。
关注点
请在此处参考原始文章
SQL SERVER - 2005 T-SQL 分页查询技术比较 (OVER 和 ROW_NUMBER()) - CTE 与派生表