义齿
2710 ワード
explainにはmysqlがselect文および接続テーブルを処理するためにインデックスを使用する方法が表示されます.より良いインデックスを選択し、より最適化されたクエリー文を書くのに役立ちます.
使用方法は、select文の前にexplainを付けるといいです.
次のようになります.
EXPLAIN列の説明:
table:この行のデータがどのテーブルについて表示されますか.
type:接続にどのタイプが使用されているかを示す重要な列です.最良から最悪までの接続タイプはconst、eq_reg、ref、range、indexhe、ALL
possible_keys:このテーブルに適用可能なインデックスを表示します.空の場合、可能なインデックスはありません.関連するドメインのWHERE文から適切な文を選択できます
key:実際に使用されているインデックス.NULLの場合、インデックスは使用されません.少ない場合、MYSQLは最適化不足のインデックスを選択します.この場合、SELECT文でUSE INDEX(indexname)を使用してインデックスを強制的に使用するか、IGNORE INDEX(indexname)を使用してMYSQLにインデックスを無視させることができます.
key_len:使用するインデックスの長さ.精度を損なわない場合は、長さが短いほど良い
ref:インデックスのどの列が使用されているかを表示し、可能であれば定数です.
rows:MYSQLがチェックしなければならない要求データを返すためのロー数
Extra:MYSQLがクエリーの追加情報をどのように解析するかについて.表4.3で議論するが,ここで見られる悪い例はUsing temporaryとUsing filesortであり,MYSQLはインデックスをまったく使用できないことを意味し,結果として検索が遅い.
extra列が返す記述の意味
Distinct:MYSQLが行に一致する行を見つけたら、検索しません.
Not exists:MYSQLはLEFTJOINを最適化し、LEFTJOIN規格に一致する行を見つけたら検索しません
Range checked for each Record(index map:#):理想的なインデックスが見つかりません.そのため、前のテーブルからの各ローの組合せについて、MYSQLはどのインデックスを使用するかをチェックし、テーブルからローを返します.インデックスを使用する最も遅い接続の1つです
Using filesort:これを見たとき、クエリーを最適化する必要があります.MYSQLは、返されたローをどのようにソートするかを発見するために追加のステップが必要です.接続タイプとソートキー値と一致条件を格納するすべての行の行ポインタに基づいて、すべての行をソートします.
Using index:カラムデータは、インデックス内の情報のみを使用して実際の行動を読み取らなかったテーブルから返されます.これは、テーブルのすべての要求カラムが同じインデックスの部分である場合に発生します.
Using temporaryがこれを見たとき、クエリは最適化する必要があります.ここで、MYSQLは、結果を格納するために一時テーブルを作成する必要があります.これは、通常、GROUP BYではなく、異なるカラムセットに対してORDER BY上で発生します.
Where usedは、WHERE従文を使用して、次のテーブルに一致するローまたはユーザーに返されるローを制限します.テーブル内のすべてのローを返したくない場合、接続タイプALLまたはindexが発生するか、異なる接続タイプの解釈(効率の高い順にソート)がクエリによって問題になります.
Systemテーブルには1行しかありません:systemテーブル.これはconst接続タイプの特殊な状況です.
const:テーブル内のレコードの最大値は、このクエリに一致します(インデックスはプライマリ・キーまたはインデックスのみ).1行しかないので、この値は実際に定数です.MYSQLはまずこの値を読んでから定数として扱うからです.
eq_ref:接続中、MYSQLはクエリー時に、前のテーブルから各レコードの結合に対してテーブルからレコードを読み出し、クエリーでインデックスがプライマリキーまたはユニークキーのすべてを使用した場合に使用します.
ref:この接続タイプは、クエリが唯一またはプライマリ・キーではないキーまたはこれらのタイプの部分(たとえば、一番左の接頭辞を使用する)を使用した場合にのみ発生します.前のテーブルの各ローの結合について、すべてのレコードがテーブルから読み出されます.このタイプは、インデックスに一致するレコードの数に大きく依存します.少ないほど良いです.
range:この接続タイプは、インデックスを使用して範囲内のローを返します.たとえば、>または<物を検索するときに発生する場合などです.
index:この接続タイプは、前のテーブルの各レコードを完全にスキャンします(インデックスは一般的にテーブルデータより小さいため、ALLよりも優れています).
ALL:この接続タイプは、前の各レコードを組み合わせて完全にスキャンします.これは一般的に悪いので、できるだけ避けるべきです.
使用方法は、select文の前にexplainを付けるといいです.
次のようになります.
- explain select surname,first_name form a,b where a.id=b.id
EXPLAIN列の説明:
table:この行のデータがどのテーブルについて表示されますか.
type:接続にどのタイプが使用されているかを示す重要な列です.最良から最悪までの接続タイプはconst、eq_reg、ref、range、indexhe、ALL
possible_keys:このテーブルに適用可能なインデックスを表示します.空の場合、可能なインデックスはありません.関連するドメインのWHERE文から適切な文を選択できます
key:実際に使用されているインデックス.NULLの場合、インデックスは使用されません.少ない場合、MYSQLは最適化不足のインデックスを選択します.この場合、SELECT文でUSE INDEX(indexname)を使用してインデックスを強制的に使用するか、IGNORE INDEX(indexname)を使用してMYSQLにインデックスを無視させることができます.
key_len:使用するインデックスの長さ.精度を損なわない場合は、長さが短いほど良い
ref:インデックスのどの列が使用されているかを表示し、可能であれば定数です.
rows:MYSQLがチェックしなければならない要求データを返すためのロー数
Extra:MYSQLがクエリーの追加情報をどのように解析するかについて.表4.3で議論するが,ここで見られる悪い例はUsing temporaryとUsing filesortであり,MYSQLはインデックスをまったく使用できないことを意味し,結果として検索が遅い.
extra列が返す記述の意味
Distinct:MYSQLが行に一致する行を見つけたら、検索しません.
Not exists:MYSQLはLEFTJOINを最適化し、LEFTJOIN規格に一致する行を見つけたら検索しません
Range checked for each Record(index map:#):理想的なインデックスが見つかりません.そのため、前のテーブルからの各ローの組合せについて、MYSQLはどのインデックスを使用するかをチェックし、テーブルからローを返します.インデックスを使用する最も遅い接続の1つです
Using filesort:これを見たとき、クエリーを最適化する必要があります.MYSQLは、返されたローをどのようにソートするかを発見するために追加のステップが必要です.接続タイプとソートキー値と一致条件を格納するすべての行の行ポインタに基づいて、すべての行をソートします.
Using index:カラムデータは、インデックス内の情報のみを使用して実際の行動を読み取らなかったテーブルから返されます.これは、テーブルのすべての要求カラムが同じインデックスの部分である場合に発生します.
Using temporaryがこれを見たとき、クエリは最適化する必要があります.ここで、MYSQLは、結果を格納するために一時テーブルを作成する必要があります.これは、通常、GROUP BYではなく、異なるカラムセットに対してORDER BY上で発生します.
Where usedは、WHERE従文を使用して、次のテーブルに一致するローまたはユーザーに返されるローを制限します.テーブル内のすべてのローを返したくない場合、接続タイプALLまたはindexが発生するか、異なる接続タイプの解釈(効率の高い順にソート)がクエリによって問題になります.
Systemテーブルには1行しかありません:systemテーブル.これはconst接続タイプの特殊な状況です.
const:テーブル内のレコードの最大値は、このクエリに一致します(インデックスはプライマリ・キーまたはインデックスのみ).1行しかないので、この値は実際に定数です.MYSQLはまずこの値を読んでから定数として扱うからです.
eq_ref:接続中、MYSQLはクエリー時に、前のテーブルから各レコードの結合に対してテーブルからレコードを読み出し、クエリーでインデックスがプライマリキーまたはユニークキーのすべてを使用した場合に使用します.
ref:この接続タイプは、クエリが唯一またはプライマリ・キーではないキーまたはこれらのタイプの部分(たとえば、一番左の接頭辞を使用する)を使用した場合にのみ発生します.前のテーブルの各ローの結合について、すべてのレコードがテーブルから読み出されます.このタイプは、インデックスに一致するレコードの数に大きく依存します.少ないほど良いです.
range:この接続タイプは、インデックスを使用して範囲内のローを返します.たとえば、>または<物を検索するときに発生する場合などです.
index:この接続タイプは、前のテーブルの各レコードを完全にスキャンします(インデックスは一般的にテーブルデータより小さいため、ALLよりも優れています).
ALL:この接続タイプは、前の各レコードを組み合わせて完全にスキャンします.これは一般的に悪いので、できるだけ避けるべきです.