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

MSSQL Server 高效分頁查詢:SET ROWCOUNT 技巧

     編輯:關於SqlServer

原理

SET ROWCOUNT N 讓後續查詢在傳回 N 列後立即停止。利用此特性,可快速將資料指標「捲動」到目標頁起始列,再取得該頁資料。

實作邏輯

  1. 輸入參數:@PageSize(頁大小)、@CurrentPage(當前頁碼,從 1 開始)。
  2. 計算需跳過的列數:@MoveRecords = @CurrentPage * @PageSize + 1。
  3. SET ROWCOUNT @MoveRecords,按主鍵順序查詢,取得第 @MoveRecords 列的主鍵值 @ID。
  4. SET ROWCOUNT @PageSize,查詢 WHERE ID >= @ID ORDER BY ID 即得目標頁資料。
  5. 最後 SET ROWCOUNT 0 恢復預設。

完整範例

DECLARE @ID INT, @MoveRecords INT, @PageSize INT = 100, @CurrentPage INT = 100;

SET @MoveRecords = @CurrentPage * @PageSize + 1;

SET ROWCOUNT @MoveRecords;
SELECT @ID = ID FROM Table1 ORDER BY ID;

SET ROWCOUNT @PageSize;
SELECT * FROM Table1 WHERE ID >= @ID ORDER BY ID;

SET ROWCOUNT 0;

效能優勢

  • 避免 NOT IN (SELECT TOP ...) 子查詢的高昂成本。
  • 利用叢集索引順序掃描,隨頁碼增長效能衰減緩慢。
  • 百萬列資料表翻至第 100 頁(每頁 100 列)仍能毫秒級回應。

注意事項

  • 要求表有單一、遞增、無間隙的整數主鍵(或可排序唯一鍵)。
  • SET ROWCOUNT 不影響 INSERT/UPDATE/DELETE 的 TOP 子句,SQL 2005+ 建議改用 OFFSET/FETCH。
  • 併發環境下資料新增/刪除可能導致頁碼漂移,需配合快照隔離或應用層容錯。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved