首頁 >資料庫 >mysql教程 >為什麼 IN 子句中的 MySQL 子查詢會導致效能問題?

為什麼 IN 子句中的 MySQL 子查詢會導致效能問題?

Mary-Kate Olsen
Mary-Kate Olsen原創
2024-11-29 05:22:25663瀏覽

Why is my MySQL subquery in an IN clause causing performance issues?

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中文網其他相關文章!

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