ホームページ > データベース > mysql チュートリアル > MySQL クエリによって一時テーブルとファイルソートが発生するのはなぜですか?

MySQL クエリによって一時テーブルとファイルソートが発生するのはなぜですか?

Patricia Arquette
リリース: 2024-11-04 08:50:02
オリジナル
596 人が閲覧しました

Why Does My MySQL Query Cause Temporary Tables and Filesort?

MySQL の一時ファイルとファイルソートのトラブル: スキーマとクエリ分析

ルックアップ テーブルとログ テーブルを備えたイベント追跡システムでは、オブジェクト統計を重要度の降順で表示することを目的としたクエリでは問題が発生します。クエリは少数のエントリで正しく機能しますが、EXPLAIN 結果は最適化の可能性を示唆しています。

問題のクエリは、event_log テーブルと lookup_event_objects テーブル間の左結合を利用し、結果を object_id でグループ化し、count_rows で並べ替えています。降順、次に object_desc が昇順で続きます。ただし、このクエリは一時テーブルとファイルソートの使用に関する警告を生成します。

MySQL は、クエリに GROUP BY 句とは異なる ORDER BY 句が含まれている場合、またはソートまたはグループ化が他のテーブルから参照されている場合に、一時テーブルを使用します。結合の最初のもの。この場合、並べ替えは計算フィールドに基づいて行われるため、インデックスの使用が不可能になるため、filesort を使用します。

この問題に対処するには、leo.object_desc の ORDER BY 句を削除します。これにより、一時テーブルとファイルソートの必要性がなくなり、クエリのパフォーマンスが向上します:

<code class="sql">EXPLAIN SELECT 
            el.object_id, 
            leo.object_desc, 
            COUNT(el.object_id) as count_rows
        FROM 
            event_log el 
            LEFT JOIN lookup_event_objects leo ON leo.object_id = el.object_id
        GROUP BY 
            el.object_id
        ORDER BY 
            count_rows DESC;</code>
ログイン後にコピー

以上がMySQL クエリによって一時テーブルとファイルソートが発生するのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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