💭

SQLの実行計画とは?

2023/10/18に公開

先に結論

クエリー実行計画 (つまり、MySQL がクエリーをどのように実行するかの説明) を取得するために使用されます。

一言で言うと、クエリの中で何が行われているかがわかるということ。
EXPLAINを使うと抽出するレコード数、インデックスの使用、JOINの条件などが記載された表が出力されます。
簡単なクエリしか使用しないならば、特に実行計画を行う必要はありません。
しかし、実務の中で複雑なクエリを投げることは往々にしてあります。
そんな時に便利なのがこのEXPLAINです。

EXPLAINって?

こんな形式で書く

EXPLAIN SELECT *
FROM HOGE
INNER JOIN FUGA
ON HOGE.HO = FUGA.FU
WHERE = ...

SELECTDELETEINSERTREPLACE および UPDATEの前にEXPLAIN を付けて実行するだけ。
これによって、テーブルがどのように、どんな順番で結合されているかに関する情報や、処理する方法を教えてくれます。

出力カラム

カラム JSON名 意味
id select_id SELECT識別子
select_type なし SELECT 型
table table_name 出力行のテーブル
partitions partitions 一致するパーティション
type access_type 結合型
possible_keys possible_keys 選択可能なインデックス
key key 実際に選択されたインデックス
key_len key_length 選択されたキーの長さ
ref ref インデックスと比較されるカラム
rows rows 調査される行の見積もり
filtered filtered テーブル条件によってフィルタ処理される行の割合
Extra なし 追加情報

重要なのはtypeです。ここにはテーブルの結合方法が示されます。
適切なものから、不適切なものまで存在し、ここを修正することで処理効率が改善される可能性が高いです。

https://dev.mysql.com/doc/refman/8.0/ja/explain-output.html

詳しくはMySQL公式を見た方がわかりやすいので割愛。

参考

https://dev.mysql.com/doc/refman/8.0/ja/explain.html#explain-table-structure

https://zenn.dev/yuulab/articles/f415920220acf9

Discussion