MySQL の SELECT 文で実際に走査されている列などを調べるには、SELECT 文の最初に EXPLAIN を付けます。

例:

EXPLAIN SELECT * FROM members WHERE group_id=1 AND status='present';

 結果は table、type などをカラムとして持つ 1 行のテーブルとして返ります。

table、key などの意味は読んで字の如くです。それ以外については説明すると長くなってしまうので、ここでは type の特徴的なものについて説明しようと思います。

const … 一致するレコードが1つしかない行への参照。非常に高速。

eq_ref … 重複のない(ユニークな)列の値との=演算による参照。

ref … 重複のある列の値との比較による参照。

index … インデックス全体をスキャン。遅い。

ALL … フルテーブルスキャン。とても遅い。

index、ALL がある場合はインデックスの作成などによる最適化を考えましょう。

関連記事