MySQL - 子查詢相關性降低IN 子句效能
給定的查詢,它使用子查詢來識別資料庫表中的重複行IN 子句遇到了嚴重的效能問題。雖然子查詢本身執行速度很快,但 IN 子句查詢需要相當長的時間。
緩慢的原因
緩慢是由子查詢的相關性質引起的。在相關查詢中,子查詢引用外部查詢中的列,使其依賴外部查詢的執行。結果,外表中的每一行都會觸發子查詢的單獨執行。
解決方案
要解決此問題,可以將相關子查詢轉換為透過選擇其中的所有欄位來實現非相關子查詢。這消除了對外部查詢的依賴,顯著提高了效能:
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 )
這個非相關查詢的執行速度比原始相關查詢快得多。
以上是為什麼 IN 子句中的 MySQL 子查詢會導致效能問題?的詳細內容。更多資訊請關注PHP中文網其他相關文章!