ホームページ >データベース >mysql チュートリアル >サブクエリを含む MySQL「IN」クエリが非常に遅いのはなぜですか?

サブクエリを含む MySQL「IN」クエリが非常に遅いのはなぜですか?

Susan Sarandon
Susan Sarandonオリジナル
2024-10-31 16:48:30557ブラウズ

 Why are MySQL

MySQL の "IN" クエリ: サブクエリのジレンマと明示的な値の効率

MySQL クエリで、サブクエリは重大なパフォーマンスのボトルネックを引き起こす可能性があります。これは、約 700 万行を含む em_link_data テーブルのクエリによって証明されています。サブクエリを含む "IN" クエリの実行には、驚くべき 18 秒かかります。

逆に、サブクエリを明示的な値に置き換えると、雷が発生します。 -高速実行。1 ミリ秒未満で完了します。この明らかな対照により、「IN」クエリはなぜサブクエリではこれほど遅くなるのかという疑問が生じます。

原因はサブクエリの処理にあります。 MySQL では、サブクエリは出現するたびに評価されます。これは、「IN」クエリのサブクエリが複数回、場合によっては数百万回実行されることを意味します。このコストのかかるプロセスは、パフォーマンスを大幅に妨げます。

対照的に、明示的な値が使用される場合、データベースは時間のかかるサブクエリ評価の必要性を回避して、テーブル内の関連レコードに直接アクセスできます。この直接アクセスにより、実行時間が大幅に短縮されます。

パフォーマンスのボトルネックを軽減するには、次の戦略を検討してください。

  • クエリを JOIN として書き換えます。 これこのアプローチによりサブクエリの必要性がなくなり、単一のより効率的なクエリが実現します。
  • リンク列のインデックス: 「IN」条件に関係する列にインデックスが作成されていることを確認します。 。この手順は、データベースが関連するレコードを迅速に識別するのに役立ちます。
  • データベース設定の最適化: 関連する MySQL パラメーターを調整して、クエリのパフォーマンスを最適化します。これらには、innodb_buffer_pool_size や sort_buffer_size などの設定が含まれる場合があります。

これらの対策によりパフォーマンスが向上しますが、可能な限りサブクエリで "IN" 演算子の使用を避けることが重要です。サブクエリと明示的な値の間の効率の対照を認識し、適切な最適化戦略を実装することで、MySQL の "IN" クエリを大幅に高速化できます。

以上がサブクエリを含む MySQL「IN」クエリが非常に遅いのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。