WHERE IN 中的子查詢導致MySQL 效能下降
當嘗試識別和檢查MySQL 資料庫中的重複行時,結果是一個看似簡單的查詢效能出乎意料地緩慢。初始查詢旨在選擇“relevant_field”列中具有重複值的所有行,使用以下結構:
SELECT relevant_field FROM some_table GROUP BY relevant_field HAVING COUNT(*) > 1
此查詢執行速度很快,但是當構造後續查詢來檢索'some_table' 的'relevant_field ' 值與第一個查詢中的值匹配,效能急劇下降。
SELECT * FROM some_table WHERE relevant_field IN ( SELECT relevant_field FROM some_table GROUP BY relevant_field HAVING COUNT(*) > 1 )
效能緩慢可歸因於子查詢作為相關查詢的性質。在這種情況下,主查詢處理的每一行都會執行子查詢,導致過多的開銷。
為了緩解此效能問題,透過選擇將相關子查詢轉換為非相關子查詢是有利的子查詢中的所有欄位。
SELECT * FROM ( SELECT relevant_field FROM some_table GROUP BY relevant_field HAVING COUNT(*) > 1 ) AS subquery
透過進行此修改,主查詢的效能顯著提高。
SELECT * FROM some_table WHERE relevant_field IN ( SELECT * FROM ( SELECT relevant_field FROM some_table GROUP BY relevant_field HAVING COUNT(*) > 1 ) AS subquery )
此修改後的查詢利用 MySQL 的最佳化功能來高效檢索重複項沒有與原始相關子查詢相關的效能損失的行。
以上是為什麼我的 WHERE IN 中帶有子查詢的 MySQL 查詢如此緩慢?的詳細內容。更多資訊請關注PHP中文網其他相關文章!