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