ORDER BY 句によるクエリの速度低下
MySQL データベース ユーザーは、ORDER BY 句の使用に関連する不可解なパフォーマンスの問題に遭遇しています。複数の結合やサブクエリを含む複雑なクエリに追加すると、クエリの実行時間はミリ秒から秒へと大幅に増加します。
ある特定のインスタンスには、最大のテーブルに約 40,000 行がある 3 つのテーブルからデータを取得するクエリが含まれています。 ORDER BY 句を使用しないと、クエリは最適に実行されます。ただし、いずれかの列が並べ替え基準として使用されると、クエリの速度が数桁遅くなり、約 10 秒かかります。
この問題の根本原因は、データベースの最適化メカニズムにあります。デフォルトでは、MySQL は一時テーブルを作成するかサブクエリを使用してクエリを最適化しようとします。 ORDER BY 句が追加されると、オプティマイザは必要な一時テーブルのサイズを誤って計算し、不十分な量のメモリを割り当てます。その結果、クエリは効率の低い並べ替えアルゴリズムにフォールバックし、その結果、速度低下が発生します。
考えられる回避策の 1 つは、相関サブクエリまたは CTE (共通テーブル式) を使用してクエリを書き換えて、明示的に指定することです。仕分けステップ。これにより、オプティマイザは一時テーブルのサイズを正確に見積もることができ、速度の低下を防ぐことができます。
以上がORDER BY を使用した MySQL クエリが非常に遅いのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。