ホームページ > データベース > mysql チュートリアル > 私のクエリで一時テーブルとファイルソートが使用されるのはなぜですか?

私のクエリで一時テーブルとファイルソートが使用されるのはなぜですか?

Susan Sarandon
リリース: 2024-11-05 01:15:02
オリジナル
315 人が閲覧しました

Why Does My Query Use Temporary Tables and Filesort?

MySQL がこのクエリで Temporary と Filesort を使用する理由

event_log テーブルと lookup_event_objects テーブルからオブジェクト統計を抽出するクエリは、パフォーマンスのボトルネックに直面しています。 EXPLAIN 出力「インデックスを使用; 一時を使用; ファイルソートを使用」で示されているように。その理由は次のとおりです。

一時テーブル

MySQL は、ORDER BY 句と GROUP BY 句の間に不一致がある場合、または順序付けまたはグループ化カラムが非属性に属している場合に一時テーブルを使用します。 -結合されたテーブル。この場合、ORDER BY 句 (count_rows DESC、leo.object_desc ASC) が GROUP BY 句 (el.object_id) と異なるため、クエリは最初の条件の影響を受けます。

Filesort

「ファイルソートの使用」は、MySQL がファイルソートで指定されたソートを実行できないことを示します。インデックスを使用した ORDER BY 句。計算フィールド (count_rows) によって順序付けしているため、データベースは完全なテーブル スキャンを実行し、結果を並べ替える必要があります。

考えられる解決策

で提案されているように提供された答えの場合、解決策は、ORDER BY 句と GROUP BY 句の間の不一致を取り除くことです。 count_rows エイリアスを GROUP BY 句内の実際の count 操作に置き換えることができます。

SELECT
    el.object_id,
    leo.object_desc,
    COUNT(el.object_id) AS count
FROM
    event_log el
LEFT JOIN
    lookup_event_objects leo ON leo.object_id = el.object_id
GROUP BY
    el.object_id,
    count
ORDER BY
    count DESC,
    leo.object_desc ASC;
ログイン後にコピー

これにより、一時テーブルとファイルソートの必要がなくなり、クエリのパフォーマンスが向上する可能性があります。

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

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