ホームページ >データベース >mysql チュートリアル >「インデックスの使用、一時的な使用、ファイルソートの使用」エラーで MySQL クエリを最適化する方法

「インデックスの使用、一時的な使用、ファイルソートの使用」エラーで MySQL クエリを最適化する方法

Linda Hamilton
Linda Hamiltonオリジナル
2024-11-04 11:15:29827ブラウズ

How to Optimize MySQL Queries with

MySQL クエリの「インデックスの使用; 一時的な使用; ファイルソートの使用」エラーへの対処

MySQL クエリを使用する際の一般的な懸念事項は次のとおりです。 「インデックスを使用しています。一時的なものを使用しています。ファイルソートを使用しています。」という警告が表示されます。このメッセージは、MySQL が一時テーブルとファイルソート操作に依存しており、パフォーマンスに影響を与える可能性があることを示しています。

この特定のケースでは、クエリに次の 2 つのパフォーマンスの問題があります:

  1. 一時テーブルの使用: クエリには、異なる GROUP BY 句と複数のテーブルの列を含む ORDER BY 句が含まれています。これにより、MySQL が一時テーブルを作成するようにトリガーされます。
  2. Filesort の使用: ORDER BY 句は計算フィールドによって並べ替えますが、インデックスを使用して実行することはできません。したがって、MySQL は filesort を使用することにします。

これらの問題を解決するには:

  • 一時テーブルの問題の場合: 異なる ORDER BY 句と GROUP BY 句を使用しないようにします。または、これらの句で同じテーブルの列を使用します。
  • Filesort の問題: ORDER BY 句で使用される計算フィールドにインデックスを作成してみてください。

クエリの最適化されたバージョンは次のとおりです:

    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,
            leo.object_desc ASC

この改訂されたクエリでは、一時テーブルとファイル並べ替え操作の使用を排除することで、パフォーマンスが向上します。

以上が「インデックスの使用、一時的な使用、ファイルソートの使用」エラーで MySQL クエリを最適化する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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