LIMIT 100000, 10 這類深分頁隨著偏移量增大效能急劇下降(需掃描並捨棄前 10 萬行)。本文實戰展示「子查詢定位起始 ID + 索引範圍掃描」優化方案,效能提升數十倍。
SELECT aid FROM articles ORDER BY aid LIMIT 80000, 4000 極慢-- 原始:掃描 8 萬行再取 4000 行
SELECT aid FROM articles ORDER BY aid LIMIT 80000, 4000;
-- 優化:子查詢先定位起始 ID,再索引範圍掃描
SELECT aid FROM articles
WHERE aid >= (SELECT aid FROM articles ORDER BY aid LIMIT 80000, 1)
ORDER BY aid LIMIT 4000;
LIMIT 80000, 1 僅需走索引取 1 個 ID,極快WHERE aid >= 起始值 直接利用主鍵索引範圍掃描,跳過前 8 萬行SELECT id, login_name, password
FROM user
JOIN (SELECT id FROM user ORDER BY login_name LIMIT 200000, 10) AS u2 USING(id);
EXPLAIN 顯示:Derived table (using index) + Primary key lookup,三階段極速。
LIMIT 即可