首頁  >  文章  >  資料庫  >  為什麼帶有子查詢的 MySQL“IN”查詢比顯式值慢得多?

為什麼帶有子查詢的 MySQL“IN”查詢比顯式值慢得多?

Barbara Streisand
Barbara Streisand原創
2024-10-31 02:09:02627瀏覽

 Why is a MySQL

子查詢和明確值「IN」查詢之間的效能差距

為什麼使用子查詢時MySQL「IN」查詢明顯慢於使用顯式值時?

考慮以下查詢:

儘管子查詢單獨在 1 毫秒內完成,但查詢大約需要 18 秒來執行。

但是,當子查詢替換為明確值時:

查詢在不到 1 毫秒內完成。

說明

效能差異是由 MySQL 評估子查詢的方式引起的。每次遇到子查詢都會執行,這表示在第一個查詢中,MySQL 實質上執行了 700 萬個查詢(對「em_link_data」表中的每一行進行子查詢評估)。相反,當使用顯式值時,子查詢僅計算一次。

解決方法

如果無法使用 JOIN 重寫查詢,則可以考慮使用查詢快取以提高效能。查詢快取儲存先前執行的查詢的結果,並在再次執行相同的查詢時重複使用它們。這可以顯著減少子查詢密集型查詢的執行時間。

要啟用查詢緩存,請將以下行新增至 MySQL 設定檔:

重新啟動 MySQL 以進行變更生效。

以上是為什麼帶有子查詢的 MySQL“IN”查詢比顯式值慢得多?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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