説明:MySQL実行プランのパフォーマンス分析
構文:
Explain + SQL
フィールドの説明:
id:
識別子を選択
SQL実行の順序の識別、SQL実行の大から小
select_type:
クエリのタイプを示します。
(1)SIMPLE(単純なSELECT、UNIONやサブクエリを使用しないなど)
(2)PRIMARY(サブクエリ内の最も外側のクエリ。クエリに複雑なサブパートが含まれている場合、最も外側の選択はPRIMARYとしてマークされます)
(3)UNION(UNIONの2番目以降のSELECTステートメント)
(4)DEPENDENT UNION(外部のクエリに応じて、UNIONの2番目以降のSELECTステートメント)
(5)UNION RESULT(UNIONの結果、unionステートメントの2番目のselectの後のすべてのオプション)
(6)SUBQUERY(サブクエリの最初のSELECT。結果は外部クエリに依存しません)
(7)DEPENDENT SUBQUERY(サブクエリの最初のSELECT、外部クエリに依存)
(8)DERIVED(SELECTのサブクエリ、派生テーブルのFROM句)
(9)UNCACHEABLE SUBQUERY(サブクエリの結果はキャッシュできません。外部リンクの最初の行を再評価する必要があります)
テーブル:
出力結果セットの表
タイプ:
テーブルへのアクセス方法は、MySQLがテーブル内の必要な行を見つけることを意味します。これは「アクセスタイプ」とも呼ばれます。
一般的に使用されるタイプは次のとおりです:ALL、index、range、ref、eq_ref、const、system、NULL(左から右、パフォーマンスが悪いから良い)
ALL:フルテーブルスキャン、MySQLはフルテーブルを走査して一致する行を検索します
インデックス:フルインデックススキャン。インデックスとALLの違いは、インデックスタイプがインデックスツリーのみをトラバースすることです。
範囲:指定された範囲の行のみを取得し、インデックスを使用して行を選択します
ref:上記のテーブルの接続一致条件、つまり、インデックス列の値を見つけるために使用される列または定数を示します
eq_ref:refと同様に、使用されるインデックスは一意のインデックスであるという違いがあります。インデックスキーの値ごとに、テーブル内の1つのレコードのみが一致します。簡単に言えば、主キーまたは一意のキーがマルチテーブル接続の関連付け条件として使用されます
const、system:MySQLがクエリの一部を最適化して定数に変換するときに、これらのタイプのアクセスが使用されます。whereリストに主キーを配置すると、MySQLはクエリを定数に変換できます。システムはconstタイプの特殊なケースです。クエリテーブルに行が1つしかない場合は、システムを使用します
NULL:MySQLは最適化プロセス中にステートメントを分解し、実行中にテーブルやインデックスにアクセスする必要すらありません。たとえば、インデックス列から最小値を選択するには、別のインデックス検索を使用できます。
potential_keys:
MySQLがテーブル内のレコードを検索するために使用できるインデックスを示します。クエリに関連するフィールドにインデックスがある場合、そのインデックスがリストされますが、必ずしもクエリによって使用されるわけではありません(クエリが使用できるインデックスで、インデックスがない場合はnullを示します) )
キー:
実際に使用されるインデックスを示し
ます。インデックスが選択されていない場合、キーはNULLです。MySQLで可能なキー列のインデックスを使用または無視するように強制するには、クエリでFORCE INDEX、USE INDEX、またはIGNORE INDEXを使用します。
key_len:
インデックスフィールドの長さ
精度を損なうことなく、長さが短いほど、参照が良好になります。
列とインデックスの比較
列とインデックスの比較は、上記のテーブルの接続一致条件、つまり、インデックス列の値を見つけるために使用される列または定数を示します
行:
行の数が(行の推定数)走査
線の数は、選択に応じてMySQLのテーブルの統計情報とインデックスを表さ推定結果セットを、行の推定数は、所望のレコードを読み取る見つけるために必要な
余分。
実装の説明と説明
whereを使用する:テーブルのすべての情報を読み取らずに、インデックスを作成するだけで必要なデータを取得できます。これは、テーブルのすべてのリクエスト列が同じインデックスの一部である場合に発生し、mysqlサーバーがストレージエンジンの行を取得することを示します次にフィルター
一時的な使用:MySQLは、クエリをソートおよびグループ化する際に一般的な結果セットを保存するために一時的なテーブルを使用する必要があることを示します。
filesortの使用:操作による順序がクエリに含まれ、インデックスを使用して完了できない並べ替え操作を「ファイルの並べ替え」と呼ぶ場合
結合バッファの使用:値を変更すると、接続条件を取得するときにインデックスが使用されないことが強調され、中間結果を格納するために接続バッファが必要になります。この値が表示された場合、クエリの特定の状況によっては、パフォーマンスを向上させるためにインデックスを追加する必要がある場合があることに注意してください。
不可能なwhere:この値は、whereステートメントが一致する行を生成しないことを強調します(統計を収集しても結果はありません)。
最適化されたテーブルを選択:この値は、オプティマイザがインデックスを使用することによってのみ、集計関数の結果から1行のみを返すことを意味します
使用されているテーブルはありません:クエリステートメントで使用されている二重句またはfrom句がありません