首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> SQL Server 資料庫 >> SQL Server 2005

SQL Server 2005 使用 ROW_NUMBER() OVER 實現高效分頁

     編輯:SQL Server 2005

基本語法

SELECT * FROM (
    SELECT ROW_NUMBER() OVER (ORDER BY CreateTime DESC) AS RowNumber, *
    FROM dbo.TableName
) t
WHERE RowNumber BETWEEN 1 AND 5;

完整分頁範本

DECLARE @PageIndex INT = 2, @PageSize INT = 10;
SELECT * FROM (
    SELECT ROW_NUMBER() OVER (ORDER BY Id) AS rn, *
    FROM dbo.BigTable
) t
WHERE rn BETWEEN (@PageIndex-1)*@PageSize+1 AND @PageIndex*@PageSize
ORDER BY rn;

三種常見寫法比較

寫法優點缺點
NOT IN + TOP相容 SQL 2000需主鍵連續遞增,效能差
ROW_NUMBER() + CTE語法清晰、支援任意排序需 SQL 2005+
OFFSET/FETCH (2012+)ANSI 標準、最簡潔版本限制

注意事項

  • 外層查詢不可直接使用 RowNumber 排序,需在內層 ORDER BY 完成。
  • 大資料量建議加上覆蓋索引避免 Key Lookup。
  • 搭配 OPTION (RECOMPILE) 解決參數嗅探導致計畫不穩。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved