首頁 >資料庫 >mysql教程 >為什麼我的 MySQL 查詢 ORDER BY 如此慢?

為什麼我的 MySQL 查詢 ORDER BY 如此慢?

Susan Sarandon
Susan Sarandon原創
2024-12-05 17:04:11239瀏覽

Why is my MySQL query with ORDER BY so slow?

使用ORDER BY 子句的查詢速度變慢

MySQL 資料庫使用者遇到了與使用ORDER BY 子句相關的令人費解的性能問題。當新增到具有多個聯接和子查詢的複雜查詢時,查詢的執行時間從毫秒顯著增加到秒。

一個特定實例涉及一個查詢,該查詢從三個表中檢索數據,其中最大的表中約有 40,000 行。如果沒有 ORDER BY 子句,查詢將獲得最佳效能。然而,當使用任意列作為排序條件時,查詢速度會減慢幾個數量級,達到 10 秒左右。

這個問題的根本原因在於資料庫的最佳化機制。預設情況下,MySQL 嘗試透過建立臨時表或使用子查詢來最佳化查詢。當新增 ORDER BY 子句時,最佳化器會錯誤計算所需臨時表的大小並分配不足的記憶體。因此,查詢會回退到效率較低的排序演算法,從而導致觀察到的速度變慢。

一種可能的解決方法是使用相關子查詢或 CTE(公用表表達式)重寫查詢以明確指定排序步驟。這允許優化器正確估計臨時表大小,防止速度變慢。

以上是為什麼我的 MySQL 查詢 ORDER BY 如此慢?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn