子查詢和明確值「IN」查詢之間的效能差距
為什麼使用子查詢時MySQL「IN」查詢明顯慢於使用顯式值時?
考慮以下查詢:
儘管子查詢單獨在 1 毫秒內完成,但查詢大約需要 18 秒來執行。
但是,當子查詢替換為明確值時:
查詢在不到 1 毫秒內完成。
說明
效能差異是由 MySQL 評估子查詢的方式引起的。每次遇到子查詢都會執行,這表示在第一個查詢中,MySQL 實質上執行了 700 萬個查詢(對「em_link_data」表中的每一行進行子查詢評估)。相反,當使用顯式值時,子查詢僅計算一次。
解決方法
如果無法使用 JOIN 重寫查詢,則可以考慮使用查詢快取以提高效能。查詢快取儲存先前執行的查詢的結果,並在再次執行相同的查詢時重複使用它們。這可以顯著減少子查詢密集型查詢的執行時間。
要啟用查詢緩存,請將以下行新增至 MySQL 設定檔:
重新啟動 MySQL 以進行變更生效。
以上是為什麼帶有子查詢的 MySQL“IN”查詢比顯式值慢得多?的詳細內容。更多資訊請關注PHP中文網其他相關文章!