-- 同樣取 10 筆,效能天差地別
SELECT * FROM yanxue8_visit LIMIT 10000, 10; -- 0.0187 秒
SELECT * FROM yanxue8_visit LIMIT 0, 10; -- 0.0004 秒
LIMIT offset, size 掃描 offset + size 行,深分頁掃描行數線性增長。
SELECT * FROM yanxue8_visit
WHERE vid >= (
SELECT vid FROM yanxue8_visit ORDER BY vid LIMIT 10000, 1
)
LIMIT 10;
原理:子查詢只掃描索引(vid 為主鍵),定位第 10001 筆的 ID;外層以 WHERE vid >= ... 範圍查詢直接命中索引,僅掃描 10 行。
| 測試案例 | 原始 LIMIT | 優化後 | 提升 |
|---|---|---|---|
淺分頁 LIMIT 10,10 | 0.0004-0.0005s | 0.0005-0.0006s | 略慢(子查詢開銷) |
深分頁 LIMIT 10000,10 | 0.0187s | 0.0061s | 3 倍 |
結論:Offset 越大,優化效果越明顯;淺分頁直接用 LIMIT 即可。
若只查詢少數欄位,建立覆合索引 (vid, col1, col2),子查詢與外層皆走索引覆蓋,完全避免回表,效能更強。