ホームページ >データベース >mysql チュートリアル >説明を使用してMySQLクエリのパフォーマンスを分析するにはどうすればよいですか?
MySQLのEXPLAIN
声明は、SQLクエリの実行計画を分析するための強力なツールです。実際にクエリを実行しません。代わりに、MySQLがどのように実行するかを示します。これにより、アプリケーションに影響を与える前に、潜在的なパフォーマンスボトルネックを特定できます。 EXPLAIN
を使用するには、SQL EXPLAIN
に説明キーワードを接頭するだけです。例えば:
<code class="sql">EXPLAIN SELECT * FROM users WHERE email = 'test@example.com';</code>
これにより、MySQLがクエリを処理するために取る手順を示すテーブルが返されます。各行は、クエリに関与するテーブルに対応する多くの場合、ステップを表します。出力にはさまざまな列が含まれており、それぞれが実行計画に関する重要な情報を提供します。これらの列を理解することは、 EXPLAIN
効果的に使用する鍵です。
EXPLAIN
出力のいくつかの重要な指標は、パフォーマンスのボトルネックを識別するために重要です。最も重要なもののいくつかを調べてみましょう。
const
、 system
、 eq_ref
、およびref
です。 const
、クエリが一定の値を使用して単一の行にアクセスすることを意味します。 system
、1つの行のみのテーブルを示します。 eq_ref
とは、一意のインデックスを使用して単一の行を見つけることを意味します。 ref
、非ユニークインデックスが使用されていることを示し、おそらく複数のインデックスルックアップをもたらす可能性があります。望ましくないタイプには、 range
、 index
、およびALL
含まれます。 range
、インデックス値の範囲が使用されることを意味します。 index
、完全なインデックススキャンを意味します。 ALL
完全なテーブルスキャンを示します。これは、大きなテーブルでは非常に非効率的です。NULL
の場合、インデックスが使用されなかったことを意味します。 EXPLAIN
を使用してパフォーマンスボトルネックを特定したら、クエリを書き換えて効率を向上させることができます。必要な変更は、 EXPLAIN
によって明らかにされた特定の問題に依存します。一般的なシナリオとソリューションを次に示します。
EXPLAIN
完全なテーブルスキャンを示している場合、インデックスを追加または最適化する必要があります。 WHERE
句で使用されている列を識別し、それらにインデックスを作成します。句WHERE
複数の列を使用する場合は、複合インデックスを検討してください。EXPLAIN
非効率的な結合タイプ( ALL
)を表示する場合、結合条件を調べ、結合列にインデックスの追加を検討します。ニーズに合わせて適切な結合タイプ(内側結合、左結合など)を使用していることを確認してください。Extra
列のこれらのフレーズは、MySQLが一時テーブルを作成したり、メモリ内のデータをソートする必要があることを示しています。これは遅いです。適切なインデックスを追加するか、ソートを避けるためにクエリを再構築することにより、クエリを最適化することを検討してください。rows
値:検査された多数の行は、クエリがデータを処理しすぎていることを示しています。句WHERE
より選択的にするために句を改良するか、インデックスを追加してスキャンされた行の数を減らします。はい、 EXPLAIN
テーブルスキャンとインデックスの欠落を識別するために非常に貴重です。前述のように、 ALL
のtype
、完全なテーブルスキャン、主要なパフォーマンスの問題を明確に示しています。 NULL
のkey
値は、インデックスが使用されていないことを明らかにしており、最適化の潜在的な機会を示唆しています。
EXPLAIN
出力を調べることにより、これらの問題に苦しむ特定のクエリを特定できます。次に、関連する列にインデックスを戦略的に追加して、パフォーマンスを劇的に改善できます。インデックスの追加の影響を監視することを忘れないでください。適切に設計されていない場合、またはデータ分布がインデックス作成の利益を得ない場合、インデックスはパフォーマンスを妨げる場合があります。インデックスの追加の前後のEXPLAIN
を使用すると、変更の有効性を確認できます。
以上が説明を使用してMySQLクエリのパフォーマンスを分析するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。