MySQLの実行計画
調べる
code:sql
EXPLAIN SELECT * FROM ..
機械的に実行計画を確認する
id SELECT 識別子。
select_type
そのtableに対する操作の種類
SIMPLE
UNIONやsubqueryを使用しない単純なSELECT
PRIMARY もっとも外側の SELECT
UNION UNION 内の 2 つめ以降の SELECT ステートメント
DEPENDENT UNION UNION 内の 2 つめ以降の SELECT ステートメントで、外側のクエリーに依存します
UNION RESULT UNION の結果。
SUBQUERY サブクエリー内の最初の SELECT
DEPENDENT SUBQUERY サブクエリー内の最初の SELECT で、外側のクエリーに依存します
DERIVED 派生テーブル SELECT (FROM 句内のサブクエリー)
MATERIALIZED 実体化されたサブクエリー
UNCACHEABLE SUBQUERY 結果をキャッシュできず、外側のクエリーの行ごとに再評価される必要があるサブクエリー
UNCACHEABLE UNION キャッシュ不可能なサブクエリー (UNCACHEABLE SUBQUERY を参照してください) に属する UNION 内の 2 つめ以降の SELECT
table
操作対象のtable
JOINした場合は複数個ある
partitions 一致するパーティション
type
system
const
一致するrecordが最大1件
速い
docs読んでもイマイチ何を言っているかわからん #?? eq_ref
ref
fulltext
ref_or_null
index_merge
unique_subquery
index_subquery
range
index
ALL
possible_keys 選択可能なインデックス
key 実際に選択されたインデックス
key_len 選択されたキーの長さ
ref インデックスと比較されるカラム
rows
操作の対象となるrecord数の見積もり
実行時の実際のrecord数とは乖離がありうる
filtered テーブル条件によってフィルタ処理される行の割合
Extra
追加情報
結果のどこを見て「これは遅い、書き換えが必要」と判断できるのかわからん
相対的な判断になると思うけど、何を基準にすればいいかわからん
mysqlは実行時間は表示されない?