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

分頁技術原理與實戰(一):為何要分頁、在哪裡分頁、MySQL/Oracle 分頁 SQL 深度解析

     編輯:MySQL 綜合教學

分頁技術原理與實戰(一):為何要分頁、在哪裡分頁、MySQL/Oracle 分頁 SQL 深度解析

什麼是分頁技術

分頁是將大量資料切割成固定大小的頁面逐步展示,使用者透過頁碼或上下頁導航獲取所需內容,類似閱讀實體書籍。常見兩種 UI 模式:數字頁碼導航、上一頁/下一頁按鈕。

分頁的必要性

  • 網路傳輸:一次性傳輸萬筆資料會佔滿頻寬,導致頁面載入極慢甚至逾時
  • 伺服器資源:全量查詢佔用大量記憶體與 CPU,可能觸發 OOM 或拖垮資料庫
  • 使用者體驗:千行表格無法閱讀,分頁符合人類認知習慣

三層架構下,分頁點的選擇直接決定系統效能上限。

分頁在哪一層做最好?

結論:每次翻頁只從資料庫撈取當頁大小的資料塊,搭配連線池省去建立連線開銷,效能最優。

主流資料庫分頁 SQL 寫法

MySQL:LIMIT offset, count

SELECT * FROM table_name LIMIT 20, 10;  -- 跳過 20 筆,取 10 筆(第 3 頁,頁面 10 筆)
-- 參數:m=起始索引(從 0 開始),n=返回筆數

Oracle:ROWNUM 多層嵌套

Oracle 無直接 LIMIT,需利用 ROWNUM 偽欄位:

-- 高效寫法(推薦)
SELECT * FROM (
  SELECT A.*, ROWNUM RN FROM (
    SELECT * FROM TABLE_NAME
  ) A WHERE ROWNUM <= 40
) WHERE RN >= 21;
  • 最內層:原始查詢
  • 中間層:WHERE ROWNUM <= 40 讓優化器提前終止掃描(Stopkey 優化)
  • 最外層:過濾 RN >= 21 取得第 21~40 筆

為何不建議 BETWEEN 寫法?

-- 低效寫法
SELECT * FROM (
  SELECT A.*, ROWNUM RN FROM (SELECT * FROM TABLE_NAME) A
) WHERE RN BETWEEN 21 AND 40;

CBO 優化器無法將第三層條件下推到最內層,導致全量掃描後再過濾,效能差數倍。

延伸閱讀

下一篇預告

將介紹 Hibernate、Struts 等框架的分頁整合、游標分頁、Keyset 分頁(Seek Method)等進階技術。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved
層級優點缺點評價
客戶端(瀏覽器/JS)實作簡單全量資料傳輸,佔用記憶體,體驗差❌ 最不可取
Web 應用層(Java/PHP/Python)邏輯集中,可快取仍需從 DB 拉全量資料,網路與 DB 壓力大⚠️ 非最佳
資料庫層(SQL LIMIT/ROWNUM)只傳輸當頁資料,網路最小;DB 可用索引、快取優化每翻頁需查詢 DB✅ 推薦