ホームページ > データベース > mysql チュートリアル > MySQL クエリでは、値が 1 つであっても、「IN」 の方が「=」 よりも遅いのはなぜですか?

MySQL クエリでは、値が 1 つであっても、「IN」 の方が「=」 よりも遅いのはなぜですか?

Mary-Kate Olsen
リリース: 2025-01-16 17:06:13
オリジナル
380 人が閲覧しました

Why is `IN` slower than `=` in MySQL queries, even with a single value?

MySQL の IN= のパフォーマンスの差異

問題: IN 演算子を使用した MySQL クエリは、= が単一の値と比較した場合でも、IN 演算子を使用したクエリよりも驚くほど遅くなる可能性があります。

根本原因: 問題は、MySQL が IN 句内のサブクエリを処理する方法にあります。古いバージョン (5.6 より前) では、これらのサブクエリを 依存 サブクエリとして誤認することがよくあります。

依存サブクエリと独立サブクエリ: 依存サブクエリは外側のクエリの 行に対して再実行されるため、パフォーマンスに重大なオーバーヘッドが発生します。 独立したサブクエリは 1 回だけ実行されます。 MySQL の以前のバージョンでは、IN サブクエリが単一の値を返した場合でも、依存しているものとして誤って処理されました。

EXPLAIN 分析: EXPLAIN コマンドは、この動作を明らかにします。 サブクエリを含む IN クエリでは実行プランに "DEPENDENT SUBQUERY" が表示されますが、= を使用した同等のクエリでは "SUBQUERY" が表示されます。

EXPLAIN 出力の例 (問題を示しています):

<code>1  'PRIMARY'             'question_law_version'  'ALL'  ''  ''  ''  ''  10148  'Using where'
2  'DEPENDENT SUBQUERY'  'question_law_version'  'ALL'  ''  ''  ''  ''  10148  'Using where'
3  'DEPENDENT SUBQUERY'  'question_law'          'ALL'  ''  ''  ''  ''  10040  'Using where'</code>
ログイン後にコピー

EXPLAIN の出力例 (= の問題を修正した後):

<code>1  'PRIMARY'   'question_law_version'  'ALL'  ''  ''  ''  ''  10148  'Using where'
2  'SUBQUERY'  'question_law_version'  'ALL'  ''  ''  ''  ''  10148  'Using where'
3  'SUBQUERY'  'question_law'          'ALL'  ''  ''  ''  ''  10040  'Using where'</code>
ログイン後にコピー

例:

この単純なクエリは問題を示しています:

<code class="language-sql">SELECT id
FROM foo
WHERE id IN (SELECT MAX(foo_id) FROM bar);</code>
ログイン後にコピー

サブクエリによって返された値が 1 つであっても、それは依存しているものとして扱われるため、実行が遅くなります。 IN= に置き換えると、パフォーマンスが大幅に向上します。

解決策:

パフォーマンスの問題は、MySQL 5.6 以降のバージョンで解決されました。 新しいバージョンにアップグレードすると、この不一致が解決されます。 アップグレードが不可能な場合は、サブクエリ (結合などを使用) で IN を回避するようにクエリを書き直すことが回避策になる可能性があります。

以上がMySQL クエリでは、値が 1 つであっても、「IN」 の方が「=」 よりも遅いのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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