首頁 >資料庫 >mysql教程 >為什麼我的 WHERE IN 中帶有子查詢的 MySQL 查詢如此緩慢?

為什麼我的 WHERE IN 中帶有子查詢的 MySQL 查詢如此緩慢?

Linda Hamilton
Linda Hamilton原創
2024-11-15 15:54:03482瀏覽

Why is My MySQL Query with a Subquery in WHERE IN So Slow?

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

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