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
ほかに使用している条件など