首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫

MySQL LIMIT 深分頁性能優化五大方案實測

     編輯:MySQL 資料庫相關知識

百萬級數據下 LIMIT 200000,10 掃描 20 萬行丟棄,極慢。核心思路:減少掃描行數,利用索引定位。

方案 1:子查詢優化(需連續 ID)

SELECT * FROM users WHERE id >= (SELECT id FROM users ORDER BY id LIMIT 100000,1) LIMIT 20;

掃描行數從 100,020 降至 20。實測 10 萬偏移從 0.10s 降至 0.02s。

方案 2:延遲關聯(覆蓋索引)

SELECT * FROM (
  SELECT id FROM wl_tagindex WHERE byname='f' ORDER BY id LIMIT 300000,10
) a LEFT JOIN wl_tagindex b ON a.id=b.id;

需建立 (byname, id) 復合索引。實測 3.21s → 0.11s。

方案 3:記錄上次最大 ID(游標分頁)

SELECT * FROM users WHERE id > 100073 ORDER BY id LIMIT 20;

無 Offset,極快。適合無限滾動、API 分頁。

方案 4:反向查找(偏移超過一半)

SELECT * FROM t WHERE batch_id=123 ORDER BY input_date DESC LIMIT 428775,40;

將大 Offset 轉為小 Offset,需知道總行數、建立排序索引。

方案 5:業務限制最大翻頁數

阿里等大廠做法:超過閾值不再允許翻頁,引導用戶用搜尋/篩選,提升體驗同時保護資料庫。

總結選型建議

  • ID 連續、無 WHERE → 子查詢/游標分頁。
  • 有 WHERE、需深分頁 → 延遲關聯 + 覆蓋索引。
  • 超大偏移、知道總數 → 反向查找。
  • 極端深分頁 → 業務限制或改搜尋。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved