首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 網頁程式設計 >> PHP 程式設計 >> PHP 相關知識

SQL Server 百萬級資料高效分頁:SET ROWCOUNT + 主鍵定位法

     編輯:PHP 相關知識

核心技巧:SET ROWCOUNT 快速跳過前 N 筆

SET ROWCOUNT N 使後續查詢在回傳 N 列後停止。配合有索引主鍵,可實現 O(1) 級定位分頁起始點。

演算法步驟

DECLARE @ID INT, @MoveRecords INT;
SET @MoveRecords = @CurrentPage * @PageSize - 1;  -- 要跳過的筆數

-- 1. 快速掃描至目標頁首筆,記住其 ID
SET ROWCOUNT @MoveRecords;
SELECT @ID = ID FROM Table1 ORDER BY ID;

-- 2. 取回目標頁資料
SET ROWCOUNT @PageSize;
SELECT * FROM Table1 WHERE ID >= @ID ORDER BY ID;

-- 3. 重置 ROWCOUNT
SET ROWCOUNT 0;

為何高效?

  • SET ROWCOUNT 讓引擎在索引掃描中提前終止,不需讀取完整結果集
  • 第二步透過 ID >= @ID 直接定位,配合 TOP/ROWCOUNT 精確取回
  • 避免傳統 TOP M-N 子查詢或臨時表的排序/掃描開銷

實測數據

千萬列大表,直接翻至第 100 頁(每頁 100 筆),回應時間極短。

適用條件與注意

  • 表需有單欄遞增主鍵/唯一索引(如 ID INT IDENTITY)
  • SET ROWCOUNT 不影響 INSERT/UPDATE/DELETE 的 TOP 子句(SQL 2005+ 建議改用 TOP)
  • SQL 2012+ 推薦使用標準 OFFSET ... FETCH 語法
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved