【えくすぷれいん】

EXPLAIN(実行計画) とは?

最終更新:
💡 SQLの処理手順を見て、改善の手がかりを探す

SQLを処理する実行計画を表示するコマンド。走査方法・行数・コストの見方と、実際に処理するEXPLAIN ANALYZEとの違いを説明します。

📌 このページのポイント
EXPLAIN:処理の手順を確認するEXPLAIN + SQL実行計画計画を見るときの三つの手がかり読み方走査・結合並べ替え推定値行数・コスト意味を確認実測との比較ANALYZEは実際に処理走査方法の名前だけで良否は決められない
表示形式と推定値の意味はDB製品により異なります。EXPLAIN ANALYZEは負荷やデータ変更の影響を確認して使います。
ひよこ ひよこ
EXPLAINは、SQLの前に付けて使うの?
ペンギン先生 ペンギン先生
MySQLやPostgreSQLでは、例えばEXPLAIN SELECT * FROM users;のように計画を表示できるよ。どんな方法で読み、結合や並べ替えをするかを見る。製品や指定した形式で表示は異なるんだ。
ひよこ ひよこ
全件走査なら、必ず直した方がいい?
ペンギン先生 ペンギン先生
必ず悪いわけではないよ。多くの行が必要な場合などは、まとめて読む方法が選ばれる。インデックスを使うかだけで良否を決めず、求める結果とデータ量、選ばれた処理を合わせて見よう。
ひよこ ひよこ
rowsやcostは、そのまま時間や処理行数?
ペンギン先生 ペンギン先生
推定値で、意味を確認する必要があるよ。例えばPostgreSQLのrowsは各ノードから出る行数の見積もりで、走査した全行数ではない。costもミリ秒ではなく、設定に基づく単位。別の製品の項目と同じ意味だと思わないでね。
ひよこ ひよこ
推定と実際の違いを調べるには?
ペンギン先生 ペンギン先生
EXPLAIN ANALYZEなら実際に処理して、行数や時間などを計画と比べられるよ。重いSQLは負荷がかかり、更新系のSQLでは変更も起こり得るので、対象と実行環境を確認しよう。見積もりと違う所を手がかりに、統計情報やSQL、インデックスなどを調べるんだ。
ペンギン
まとめ:ざっくりこれだけ覚えればOK!
「EXPLAIN」って出てきたら「SQLの実行計画を見て、処理の手がかりを探すコマンド」と思えばだいたいOK!
📖 おまけ:英語の意味
「EXPLAIN」 = 説明する
💬 データベースに、SQLをどう処理する予定か説明してもらうイメージです。通常の計画表示と、実際に処理して値を測る機能を区別します。

参考資料

← 用語集にもどる