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

SQL Server 2005 大量資料分頁查詢最佳實踐

     編輯:SQL Server 2005

使用 ROW_NUMBER() 視窗函數分頁

SQL Server 2005 引入 ROW_NUMBER() OVER (ORDER BY ...),可高效實現分頁,避免舊版 TOP ... WHERE NOT IN 的效能問題。

標準分頁範本

DECLARE @StartIndex INT = 1;   -- 當頁起始序號 (如第 1 筆)
DECLARE @EndIndex INT = 20;    -- 當頁結束序號 (如第 20 筆)
-- 亦可由 @PageSize、@PageIndex 計算得出

SELECT *
FROM (
    SELECT *,
           ROW_NUMBER() OVER (ORDER BY OrderColumn) AS RowNum
    FROM TableName
) AS PagedResult
WHERE PagedResult.RowNum BETWEEN @StartIndex AND @EndIndex;

關鍵點

  • OrderColumn:決定排序依據的欄位,建議有索引支援。
  • 子查詢先產生行號,外層再依範圍過濾,執行計畫穩定。
  • 適用於 SQL Server 2005 及以上版本。
  • 若需總筆數,可搭配 COUNT(*) OVER() (2008+) 或另行查詢。

效能建議

  1. 確保 ORDER BY 欄位有適當索引 (覆蓋索引更佳)。
  2. 避免在大表上使用 SELECT *,僅選取必要欄位。
  3. 深分頁 (如第 10000 頁) 仍會掃描大量行號,考慮使用 Keyset Pagination (游標分頁) 優化。
  4. 此為 SQL Server 2005 時代最通用、效能最佳的分頁寫法,至今仍廣泛使用。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved