実行結果を用いた分析ができるようにまとめていく
実行計画結果を表示するには、SQL文の先頭にEXPLAIN
を追加
EXPLAIN
SELECT *
FROM users
left join user_organizations on users.id = user_organizations.user_id
id|select_type|table |partitions|type|possible_keys |key|key_len|ref|rows|filtered|Extra |
--+-----------+------------------+----------+----+----------------------------------+---+-------+---+----+--------+------------------------------------------+
1|SIMPLE |users | |ALL | | | | | 10| 100.0| |
1|SIMPLE |user_organizations| |ALL |user_organizations_user_id_foreign| | | | 12| 100.0|Using where; Using join buffer (hash join)|
カラム | 概要 | メモ |
---|---|---|
id |
単なる通し番号 | |
select_type |
対象のテーブルの操作内容を記載される(SELECT, DELETE)、別テーブル参照 | |
table |
該当テーブル | |
partitions |
スキーマ定義としてのPARTITON に関する情報 |
|
大きなテーブルを小さなセグメントに分割して、大量のデータを効率的に管理・アクセスするようにする | ||
type |
どのようにデータにアクセスするか。別テーブルで管理 | |
possible_keys |
候補となるインデックスの一覧 | NULLであれば、改善できる可能性あり |
key |
実際に使われるインデックス | |
(カバリングインデックスを使った場合、possible_keysにないインデックスがでてくることがあるかも) | ||
key_len |
インデックスに使ったカラムの長さ | |
このキー長が短い方が高速のため、長い場合はハッシュ化してもいいかも | ||
ref |
インデックスと比較する定数またはカラム。JOINされている場合は、JOIN先のカラムが表示される | |
rows |
クエリに実行する時に取ってくる行数。 | |
JOIN後の場合は、JOIN元レコードに対しての行数 | 大きいほどクエリも大きい | |
filtered |
フィルタされていない割合。100だとフィルターされていない。 |
select_type
の詳細
select_typeの値 | JSON名 | 意味 |
---|---|---|
SIMPLE |
なし | 単純な SELECT (UNION やサブクエリーを使用しません) |
PRIMARY |
なし | もっとも外側の SELECT |
UNION |
なし | UNION 内の 2 つめ以降の SELECT ステートメント |
DEPENDENT UNION |
dependent (true) | UNION 内の 2 つめ以降の SELECT ステートメントで、外側のクエリーに依存します |
UNION RESULT |
union_result | UNION の結果。 |
SUBQUERY |
なし | サブクエリー内の最初の SELECT |
DEPENDENT SUBQUERY |
dependent (true) | サブクエリー内の最初の SELECT で、外側のクエリーに依存します |
DERIVED |
なし | 導出テーブル |
DEPENDENT DERIVED |
dependent (true) | 別のテーブルに依存する導出テーブル |
MATERIALIZED |
materialized_from_subquery | 実体化されたサブクエリー |
UNCACHEABLE SUBQUERY |
cacheable (false) | 結果をキャッシュできず、外側のクエリーの行ごとに再評価される必要があるサブクエリー |
UNCACHEABLE UNION |
cacheable (false) | キャッシュ不可能なサブクエリー (UNCACHEABLE SUBQUERY を参照してください) に属する UNION 内の 2 つめ以降の SELECT |
type
の詳細
type の値 |
概要 |
---|---|
system |
テーブルに行が一つしかないケース |
const |
主キーまたはユニークインデックスで検索する際のアクセス |