使用ORDER BY 子句的查詢速度變慢
MySQL 資料庫使用者遇到了與使用ORDER BY 子句相關的令人費解的性能問題。當新增到具有多個聯接和子查詢的複雜查詢時,查詢的執行時間從毫秒顯著增加到秒。
一個特定實例涉及一個查詢,該查詢從三個表中檢索數據,其中最大的表中約有 40,000 行。如果沒有 ORDER BY 子句,查詢將獲得最佳效能。然而,當使用任意列作為排序條件時,查詢速度會減慢幾個數量級,達到 10 秒左右。
這個問題的根本原因在於資料庫的最佳化機制。預設情況下,MySQL 嘗試透過建立臨時表或使用子查詢來最佳化查詢。當新增 ORDER BY 子句時,最佳化器會錯誤計算所需臨時表的大小並分配不足的記憶體。因此,查詢會回退到效率較低的排序演算法,從而導致觀察到的速度變慢。
一種可能的解決方法是使用相關子查詢或 CTE(公用表表達式)重寫查詢以明確指定排序步驟。這允許優化器正確估計臨時表大小,防止速度變慢。
以上是為什麼我的 MySQL 查詢 ORDER BY 如此慢?的詳細內容。更多資訊請關注PHP中文網其他相關文章!