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

Oracle 大量資料分頁查詢:ROWNUM 陷阱與 ROWID 排序穩定解法

     編輯:Oracle 資料庫基礎

Socket 傳輸限制 5000 字元,需將大量查詢結果分批傳輸。直接使用 ROWNUM 遭遇兩大問題:ROWNUM > N 永無結果、結合 ORDER BY 時順序不穩定。

問題根因

  • ROWNUM 在 WHERE 階段產生,ROWNUM > 5 導致第一行即被過濾,後續行永無機會獲得 ROWNUM=1。
  • ORDER BY 在 ROWNUM 分配後執行,導致顯示順序與實際分頁邏輯錯位。

穩定分頁查詢模板

SELECT *
FROM (
  SELECT ROWNUM sn, t.*
  FROM (
    SELECT * FROM table_name ORDER BY rowid
  ) t
)
WHERE sn > 5 AND sn <= 10;

關鍵設計點

  1. 最內層 ORDER BY ROWID:ROWID 為物理位址唯一且不變,保證排序穩定、無重複/遺漏。
  2. 中間層賦予 ROWNUM 連續序號 sn。
  3. 最外層以 sn BETWEEN start AND end 精準切片。

進階優化(12c+)

SELECT * FROM table_name ORDER BY rowid
OFFSET 5 ROWS FETCH NEXT 5 ROWS ONLY;

待後續壓力測試驗證大資料量下效能表現,但邏輯正確性已經過基本驗證。

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