プログラミング、フリーダイビング、ブロックチェーンのブログ

プログラミング道場

MySQLのexplainの見方

更新日:

記事の内容


この記事では、MySQLのexplainコマンドの見方を紹介します。
explainコマンドとは、SQLの実行計画を教えてくれるコマンドです。
explainコマンドの見方を知っておけば、きっと効率の良いSQLを書く際に役立つはずです。

type

type 説明
const PRIMARY KEYまたはUNIQUEインデックスのルックアップによるアクセス
最速
eq_ref JOINにおいてPRIARY KEYまたはUNIQUE KEYが利用される時のアクセスタイプ
constと似ているがJOINで用いられるところが違う
ref PRIMARY KEYまたはUNIQUEインデックスのルックアップによるアクセス
最速
range インデックスを用いた範囲検索
index フルインデックススキャン
インデックス全体をスキャンする必要があるのでとても遅い
ALL フルテーブルスキャン
インデックスがまったく利用されていないことを示す
OLTP系の処理では改善必須

key

オプティマイザによって選択されたキー。

key_len

選択されたキーの長さ。
インデックスの走査は、キー長が短い方が高速です。
インデックスをつけるカラムを選ぶ時には、そのことを念頭に置いて下さい。

ref

検索条件で、keyと比較されている値やカラムの種類。
定数が指定されている場合はconstと表示される。
JOINが実行されている時には、結合する相手側のテーブルで検索条件として利用されているカラムが表示される。

row

そのテーブルからフェッチされる行数の見積もりです。
このフィールドはあくまでもテーブル全体の行数やインデックスの分散具合から導き出された大まかな見積もりなので、実際にフェッチされる正確な行数ではないので注意が必要です。

extra

カラム 説明
Using where 頻繁に出力される追加情報
WHERE句に検索条件が指定されており、なおかつインデックスを見ただけではWHERE句の条件を全て適用することが出来ない場合に表示される。
Using index クエリがインデックスだけを用いて解決できることを示す
Covering Indexを利用している場合などに表示される
Using filesort filesort(クイックソート)でソートを行っていることを示す
Using temporary JOINの結果をソートしたり、DISTINCTによる重複の排除を行う場合など、クエリの実行にテンポラリテーブルが必要なことを示す
Using index for group-by MIN()/MAX()がGROUP BY句と併用されているとき、クエリがインデックスだけを用いて解決できることを示す
Range checked for each record JOINにおいてrangeまたはindex_mergeが利用される場合に表示される
Not exists MySQL はクエリーに対する LEFT JOIN 最適化を実行でき、LEFT JOIN 条件に一致する 1 つの行が見つかったら、前の行の組み合わせについて、このテーブルでそれ以上の行を調査しません。

まとめ

explainコマンドを知ることは、高速のSQLを書く第一歩です。
是非、この記事を見ながらSQLの実行計画と格闘して下さい。
また、explainやshow statusといったコマンドの詳細については、この本に書かれています。

Good luck for your engineer life!

MySQLをより詳しく勉強したい人は、この記事を読んで下さい

MySQLの学習でオススメの本【2019年最新】

初心者向け【入門編】 書き込み式SQLのドリル SQLの基本である、CREATE、READ、UPDATE、DELETE、JOINなどを書きながら丁寧に覚えていきます。 GROUP BYやWHEREなども抑えており、初心者にはオススメできる本 ...

続きを見る


30代からプログラミングを始めようか迷っている人は、この記事を読んで下さい

30代からプログラミングを始めることは可能なのか?【頑張ればギリギリセーフ】

エンジニアは人気の職種だと聞いていますが、若い人達が多い印象です。 30代から始めても間にあいますか? 2030年には79万人のエンジニアが不足 まずは、今後、10年間以上に渡るエンジニアの需給について確認しましょう。 自分の身を預けたいと ...

続きを見る


プログラミングスクールに行くか迷っている人は、この記事を読んで下さい

なんとなく、エンジニアになりたい人が無料のプログラミングスクールに行くべき理由【2019年12月の最新】

有料や無料のプログラミングスクールが多すぎて、どこにしようか迷っています。 無料のプログラミングスクールは、お得そうに見えますが、実際の所はどうですか? メリットやデメリットなどがあれば教えて下さい。 無料のスクールを推す理由 まずは、私が ...

続きを見る


自分がプログラミングスクールに行っても大丈夫か知りたい人は、この記事を読んで下さい

プログラミングスクールに通って挫折する人と上手くいく人の違い

スクールに通っている人の3パターン プログラミングスクールに通っている人のパターンを整理すると、以下の3パターンに分かれます。 それぞれのタイプの特徴を、もう少し詳細に説明していきます。 それぞれのタイプの特徴 大した努力をせずに文句ばかり ...

続きを見る


プログラミング学習で時間を無駄にしたくない人は、この記事を読んで下さい

プログラミング学習で時間を無駄にしない方法【実行あるのみ!】

今からWeb系のエンジニアになりたいのですが、経験は全くありません。 プログラミング学習を始めるにあたって、時間を無駄にしたくないのですが、どのように、勉強を始めたらよいのでしょうか? スタート地点に立つまで、ダラダラと勉強を続けない 周り ...

続きを見る


独学で実務っぽい経験を積みたい人は、この記事を読んで下さい

エンジニアが独学で実務経験っぽいことを学ぶ方法

エンジニアとして就職するためには実務経験が大事だと聞いていますが、就職しないことには実務経験を積むことができません。 どうやって、最初の実務経験を積んだらいいでしょうか? スクールの理想と現実 これからプログラミングを学ぼうとしている人が描 ...

続きを見る

関連コンテンツ

-MySQL, プログラミング

Copyright© プログラミング道場 , 2019 All Rights Reserved Powered by AFFINGER4.