MySQL クエリのパフォーマンス例外: IN 演算子と等号演算子のパフォーマンスの違い
問題の説明
MySQL では、IN 条件を使用した SELECT クエリのパフォーマンスは、等号 (=) 演算子を使用した同じクエリよりも大幅に低下します。 IN 条件に単一の値しか含まれていない場合でも、パフォーマンスの違いは大きくなる可能性があります。
説明
この問題は、MySQL 5.6.x で修正された MySQL の最適化の欠陥に起因します。この問題は、IN 条件を含むサブクエリが独立サブクエリではなく依存サブクエリとして誤って分類された場合に発生します。
依存サブクエリと独立サブクエリ
クエリ分析のサンプル
次のクエリ例は、この異常を示しています。
<code class="language-sql">SELECT * FROM question_law_version WHERE id IN ( SELECT MAX(foo_id) FROM bar )</code>
このクエリを実行すると、サブクエリは依存サブクエリとして扱われるため、パフォーマンスが低下します。ただし、IN を = に置き換えると依存関係が削除され、パフォーマンスが大幅に向上します。
クエリプランの比較
EXPLAIN コマンドを使用してクエリ プランを検査すると、違いが明らかになります。
= 演算子を使用したクエリ プランには「DEPENDENT SUBQUERY」が存在しないことに注意してください。
以上がMySQL の「IN」演算子は、値が 1 つであっても「=」よりも遅いのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。