sql server 數據庫分頁查詢

Sqlserver數據庫分頁查詢一直是Sqlserver的短板

sql server2005之前:
 

SELECT TOP 頁大小 *
FROM TestTable
WHERE (ID NOT IN
          (SELECT TOP 頁大小*頁數 id
         FROM 表
         ORDER BY id))
ORDER BY ID
這種方法由於使用了not in,效率不太高。


SQL 2005/2008 由於支持了Row_Number於是通過派生表可以實現分頁查詢:

SELECT LastName, FirstName, EmailAddress
FROM (SELECT LastName, FirstName, EmailAddress,
ROW_NUMBER() OVER (ORDER BY LastName, FirstName, EmailAddress) AS RowNumber
FROM Employee) EmployeePage
WHERE RowNumber > @Start AND RowNumber <= @End
ORDER BY LastName, FirstName, EmailAddress

 

SQL SERVER 2012 支持了OFFSET,一個Select可以分頁查詢:

SELECT LastName, FirstName, EmailAddress
FROM Employee
ORDER BY LastName, FirstName, EmailAddress
OFFSET 14000 ROWS
FETCH NEXT 50 ROWS ONLY;
最後說下,根據老外的文章,在2012裏,如果前面加上TOP(50),那麼執行計劃就會少讀很多行數據(讀的精準了),提高性能。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章