地方エンジニアの学習日記

興味ある技術の雑なメモだったりを書いてくブログ。たまに日記とガジェット紹介。

【MySQL】MySQLのEXPLAIN

mysql> explain select id from friends where sex = 20 and age = 1;
+----+-------------+---------+------------+------+---------------+---------+---------+-------------+------+----------+-------------+
| id | select_type | table   | partitions | type | possible_keys | key     | key_len | ref         | rows | filtered | Extra       |
+----+-------------+---------+------------+------+---------------+---------+---------+-------------+------+----------+-------------+
|  1 | SIMPLE      | friends | NULL       | ref  | index_t       | index_t | 6       | const,const |    1 |   100.00 | Using index |
+----+-------------+---------+------------+------+---------------+---------+---------+-------------+------+----------+-------------+

クエリの最適化 = 「書き換える前と後でクエリの実行結果が同じになる」 AND 「実行速度が上がる」。SELECT文の先頭に「EXPLAIN」をつけて実行することでクエリの実行計画がわかる。その実行計画の見方を書いていく。とりあえずそれぞれのフィールドの意味を自分の理解で書いてみる。(EXPLAINはMySQLオプティマイザーがどの実行計画を選んだかを表示させるステートメントです)

id

select_type

クエリの種類。JOIN、サブクエリ、UNIONなど

table

アクセスする対象のテーブル

partitions

type

対象のテーブルに対してのアクセス方法

possible_keys

オプティマイザがテーブルのアクセスに利用可能なインデックスの候補として挙げたキーの一覧。必ず使われるわけではないし強制的にここにないものを使用させたりすることも可能。

key

テーブルにアクセスするために使ったindex

key_len

選択されたキーの長さ

ref

検索条件で、keyと比較されている値やカラムの種類

rows

そのテーブルからフェッチされる行数の見積もり

filtered

Extra

ほかに使用している条件など

参考

thinkit.co.jp

nippondanji.blogspot.com