【えくすぷれいん】
EXPLAIN(実行計画) とは?
💡 SQLが「どう実行されるか」を見える化するコマンド
📌 このページのポイント
EXPLAINってどう使うの?
SQLの前に「EXPLAIN」を付けるだけ。「EXPLAIN SELECT * FROM users WHERE email = 'test@example.com'」で、このSELECTがどう実行されるかの計画が表示される。MySQLなら「EXPLAIN ANALYZE」で実際に実行した上で実測値も見られるよ。
実行計画のどこを見ればいいの?
PostgreSQLだと表示が全然違うの?
PostgreSQLのEXPLAINはツリー形式で表示される。「Seq Scan」がフルスキャン、「Index Scan」がインデックス利用。「cost=0.00..100.00」は処理コストの見積もり、「rows=1000」は推定行数。「EXPLAIN ANALYZE」で実測時間も出るから、見積もりと実測の差も確認できるよ。
EXPLAIN見てもよくわからないんだけど…
最初はそうだよね。まずは「ALLやSeq Scanが出ていないか」「rowsが想定より大きくないか」の2点だけチェックすれば十分。慣れてきたら「Extra列のUsing filesortやUsing temporary」「Nested Loopの内側の行数」なども見ていく。実はEXPLAINの推定値と実測値がズレることがよくあって、統計情報(テーブルのデータ分布の情報)が古いと実行計画自体が間違った判断をする。ANALYZE TABLEで統計を更新すると実行計画が変わって速くなることもある。実行計画を「信じすぎない」ことも大事なポイントなんだ。
📖 おまけ:英語の意味
「EXPLAIN」 = 説明する
💬 「このクエリをどう実行するか説明して」とデータベースに尋ねるイメージ