MySQLのEXPLAN説明コマンドと使い方説明


1,情景は説明します:同僚は私にmysqlの中でexplinを使うように教えて、そこで1回の帰ってくる内容の意味を調べました。
2,現在役に立つ内容は下記のように記録します。
1,explinはmysqlがどのようにインデックスを使ってselect文と接続表を処理するかを示しています。より良い索引の選択とより最適なクエリ文の作成に役立ちます。
使い方は、select文の前にexplinをつければいいです。

explain select count(DISTINCT uc_userid) as user_login from user_char_daily_gameapp_11 where uc_date >= "2017-09-04" and uc_date<="2017-09-08" AND uc_date >= "2017-06-01" LIMIT 1 
2,EXPLAN列の説明:
テーブル:この行を表示するデータはどの表についてですか?
type:重要な列です。接続にはどのタイプが使われているかを表示します。最高から最悪までの接続タイプはconst、eq_です。reg、ref、range、indexheとALL
possiblekeys:この表に適用可能なインデックスを表示します。空の場合は、可能なインデックスがありません。関連するドメインは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はインデックスが使えないという意味で、検索はとても遅くなります。
3,extra列の戻り記述の意味
Dispinct:MYSQLが行に合わせて行を見つけたら、もう検索しません。
Not exists:MYSQLはLEFT JINを最適化しました。LEFT JOIN規格に合う行を見つけたら、もう検索しません。
Range checkd for each Record:理想的な索引が見つからないので、前の表から来た各行の組み合わせについて、MYSQLはどのインデックスを使っているかを確認し、表から返します。これはインデックスを使用する最も遅い接続の一つです。
Using filesort:これを見たときに、検索は最適化されます。MYSQLは、帰りの行の並べ替え方法を見つけるために追加のステップを必要とする。接続の種類と
並べ替えキーの値と条件にマッチしたすべての行の行ポインタを記憶して、すべての行を並べ替えます。
Using index:列データはインデックス中の情報を使用しただけで実際の行動を読み取らなかったテーブルから返されます。これはテーブルのすべての要求列が同じインデックスの部分であるときに発生します。
Using temporaryはこれを見た時、照会は最適化されます。ここで、MYSQLは、結果を格納するための仮テーブルを作成する必要があり、これは通常、異なる列セットのORDER BY上で行われ、GROUTP BY上ではない。
Where usedは、WHEREスレーブを使用して、どの行が次の表と一致するか、またはユーザーに戻るかを制限しています。表のすべての行に戻りたくないなら、接続タイプ
ALLまたはindexは、これが発生したり、問題がある接続タイプの説明を調べたりします。
system表は一行しかないです。system表です。これはconst接続タイプの特殊な状況です。
const:テーブル内のレコードの最大値は、このクエリにマッチすることができます。一行しかないので、この値は実際に定数です。
MYSQLはこの値を先に読んで定数として扱います。
eq_ref:接続中、MYSQLはクエリ時に、前のテーブルから、各レコードの結合についてテーブルから記録を読み取ります。クエリでは、索引をメインキーとして使用しました。
一キーのすべての場合に使用します。
ref:この接続タイプは、クエリーが唯一またはメインキーではないキーまたはこれらのタイプの部分(例えば、一番左のプレフィクスを利用する)を使用したときにのみ発生します。前の表に対する
各行が連携して、すべての記録が表から読み出されます。このタイプはインデックスによるレコードの数に大きく依存します。少なければ少ないほどいいです。
この接続タイプはインデックスを使って範囲の行を返します。
index:この接続タイプは前の表の各記録を完全にスキャンします。インデックスは一般的に表のデータより小さいですから。
ALL:この接続タイプは前の各記録に対して共同で完全スキャンを行います。これは一般的に悪いです。できるだけ避けるべきです。
締め括りをつける
以上述べましたが、MySQLのEXPLAN解釈コマンドと使い方についての解説を紹介しました。皆さんに何か質問があれば、メッセージをください。