為什麼在子查詢中使用「IN」會減慢 MySQL 查詢速度,但使用顯式值時卻不會?

Barbara Streisand
發布: 2024-10-30 04:10:02
原創
995 人瀏覽過

Why does using

使用「IN」與明確值進行慢速MySQL 查詢

在MySQL 中,「IN」運算子在使用時可能會導致效能顯著下降通過子查詢,儘管它使用顯式值快速執行。

問題

考慮以下 MySQL 查詢:

SELECT
COUNT(DISTINCT subscriberid)
FROM
em_link_data
WHERE
linkid in (SELECT l.id FROM em_link l WHERE l.campaignid = '2900' AND l.link != 'open')
登入後複製

儘管子查詢和列索引,此查詢執行大約需要 18 秒。然而,以顯式值取代子查詢結果可以顯著加快查詢速度,在1 毫秒內完成:

SELECT
COUNT(DISTINCT subscriberid)
FROM
em_link_data
WHERE
linkid in (24899,24900,24901,24902);
登入後複製

推理

效能差異源自子查詢的行為。在 MySQL 中,每次引用子查詢時都會對其進行評估。因此,原始查詢執行子查詢大約 700 萬次,導致效能降低。

解決方案

要解決此問題,請考慮使用JOIN 而不是子查詢:

SELECT
COUNT(DISTINCT subscriberid)
FROM
em_link_data
INNER JOIN em_link l
ON em_link_data.linkid = l.id
WHERE
l.campaignid = '2900' AND l.link != 'open'
登入後複製

此方法執行單一查詢,顯著提高性能。

以上是為什麼在子查詢中使用「IN」會減慢 MySQL 查詢速度,但使用顯式值時卻不會?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板