同樣取 10 筆資料:
SELECT * FROM yanxue8_visit LIMIT 0,10 → 耗時 0.0004~0.0005 秒SELECT * FROM yanxue8_visit LIMIT 10000,10 → 耗時 0.0187 秒(慢 40 倍)原因:MySQL 需先掃描並捨棄前 10000 列,再取後 10 列,偏移量越大效能越差。
SELECT * FROM yanxue8_visit
WHERE vid >= (
SELECT vid FROM yanxue8_visit ORDER BY vid LIMIT 10000, 1
)
LIMIT 10;
vid 主鍵)定位第 10001 筆的 ID,極快。WHERE vid >= ... LIMIT 10 回表取資料,避免大偏移掃描。| 查詢方式 | OFFSET=10 | OFFSET=10000 |
|---|---|---|
| 直接 LIMIT | 0.0004~0.0005 秒 | 0.0187 秒 |
| 子查詢優化 | 0.0005~0.0006 秒 | 0.0061 秒(快 3 倍) |
LIMIT 即可,子查詢反而略慢。vid),且查詢順序與索引順序一致。WHERE id > $last_id LIMIT 10,完全避免 OFFSET。