offset + limit 時立即停止,返回結果集。問題:早期版本 ORDER BY col LIMIT 10 需先全量排序 (filesort) 再截取,大表極慢。
優化邏輯:
ORDER BY 欄位有索引,且排序方向與索引順序一致 (或可反向掃描),優化器直接按索引順序讀取,邊讀邊計數,讀滿 limit 行即停止,完全避免 filesort。OFFSET (如 LIMIT 10000, 10),仍需跳過前 10000 行,但僅掃描索引葉節點,無需排序。ORDER BY 列必須為索引前綴,且無混合 ASC/DESC (除非 8.0+ 支援降序索引)。Using index:覆蓋索引,無需回表。Using filesort:未用到索引排序,觸發 filesort (需優化)。ORDER BY col LIMIT N 查詢建立對應索引。WHERE id > last_id ORDER BY id LIMIT N)。WHERE 等值列放前,ORDER BY 列放後 (最左前綴原則)。掌握此機制,可寫出極致高效的分頁查詢。