較高的LIMIT OFFSET 對MySQL 查詢效能的影響
當執行帶有LIMIT 子句和大型表的SELECT 查詢時,設定較高的LIMIT OFFSET偏移值會大幅減慢查詢的執行時間。當使用帶有主鍵的 ORDER BY 子句時,這種行為尤其明顯。
例如,考慮一個名為「large」的表,其中包含超過 1600 萬筆記錄(大小為 2GB)。與具有較高偏移量的查詢相比,如下所示的查詢:
SELECT * FROM large ORDER BY `id` LIMIT 0, 30
執行速度要快得多,例如:
SELECT * FROM large ORDER BY `id` LIMIT 10000, 30
兩個查詢檢索相同數量的記錄(30 ),說明效能差異不是由於ORDER BY操作的開銷造成的。
為了最佳化查詢,建議盡量減少使用high限制偏移量。相反,請考慮使用 WHERE 子句根據已知標識符選擇記錄,這將導致偏移量為零。
例如,如果目標是檢索最新30 行,則可以使用以下查詢:
SELECT * FROM large WHERE id > last_known_id LIMIT 0, 30
透過維護最後一個已知ID (last_known_id) 的記錄,這種方法允許查詢始終從零偏移量開始,顯著改善表演。
以上是為什麼 MySQL 查詢中的高 LIMIT OFFSET 值如此緩慢?的詳細內容。更多資訊請關注PHP中文網其他相關文章!