LIMIT offset, size 在大偏移量時效能崩潰:
SELECT * FROM yanxue8_visit LIMIT 0,10 -- 0.0004~0.0005s
SELECT * FROM yanxue8_visit LIMIT 10000,10 -- 0.0187s(慢 40 倍)
MySQL 需掃描並丟棄前 offset 行,偏移量越大越慢。
-- 先用子查詢取得目標 offset 的主鍵值
SELECT vid FROM yanxue8_visit ORDER BY vid LIMIT 10000,1
-- 再用主鍵範圍查詢
SELECT * FROM yanxue8_visit
WHERE vid >= (上述子查詢結果)
LIMIT 10
| 偏移量 | 直接 LIMIT | 子查詢定位法 | 提升倍數 |
|---|---|---|---|
| 10 | 0.0004~0.0005s | 0.0005~0.0006s | 略慢(子查詢開銷) |
| 10,000 | 0.0187s | 0.0061s | 3 倍 |
LIMIT 更簡單高效若無有序主鍵,可考慮「游標分頁」(記住上一頁最大 ID,下一頁 WHERE id > last_id LIMIT size),完全避開 OFFSET 掃描。