サブクエリで「IN」を使用すると MySQL クエリが遅くなるのに、明示的な値を使用した場合は遅くならないのはなぜですか?

Barbara Streisand
リリース: 2024-10-30 04:10:02
オリジナル
994 人が閲覧しました

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 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート