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

SQL Server 分頁查詢的兩種經典方案與性能對比

     編輯:關於SqlServer

SQL Server 早期版本分頁查詢的兩種主流寫法

在 SQL Server 2005 推出 ROW_NUMBER() 窗口函數之前,開發者通常採用以下兩種方式實現分頁:

方法一:NOT IN 子查詢法

SELECT TOP 100 * 
FROM tbllendlist 
WHERE fldserialNo NOT IN (
    SELECT TOP 300100 fldserialNo 
    FROM tbllendlist 
    ORDER BY fldserialNo
)
ORDER BY fldserialNo

邏輯是:先跳過前 300,100 筆記錄,再取出後續 100 筆。雖然直觀,但 NOT IN 在大數據量下可能產生較高的 I/O 開銷。

方法二:MAX 子查詢法

SELECT TOP 100 * 
FROM tbllendlist 
WHERE fldserialNo > (
    SELECT MAX(fldserialNo) 
    FROM (
        SELECT TOP 300100 fldserialNo 
        FROM tbllendlist 
        ORDER BY fldserialNo
    ) AS T
)
ORDER BY fldserialNo

這種寫法先找出第 300,100 筆記錄的最大 ID,再以此為界點向後查詢。實測顯示,方法一在大多數場景下執行速度略快。

現代最佳實踐建議

自 SQL Server 2005 起,強烈建議改用標準的 OFFSET ... FETCH 或 ROW_NUMBER() 窗口函數,語法更清晰、優化器支援更完善,避免舊寫法的性能陷阱。

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