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),那麼執行計劃就會少讀很多行數據(讀的精準了),提高性能。