explain
は SQL 文を分析するために使用されます。具体的な使用方法は以下の通りです:
実行する SQL 文の前にexplain
を追加するだけでよいです。
各フィールドの意味は以下の通りです:
- id:選択識別子で、id が大きいほど優先度が高く、先に実行されます。
- select_type:クエリのタイプを示します。
- table:出力結果セットのテーブルです。
- partitions:マッチするパーティションです。
- type:テーブルの結合タイプを示します。
- possible_keys:クエリ実行時に使用可能なインデックスを示します。
- key:実際に使用されるインデックスを示します。
- key_len:インデックスフィールドの長さです。
- ref:列とインデックスの比較です。
- rows:おおよその行数の推定です。
- filtered:テーブル条件でフィルタリングされた行の割合です。
- Extra:実行の状況と説明です。
最も重要なのは、type フィールドで、以下の値があります:
- all:テーブル全体のデータをスキャンします。
- index:インデックスをトラバースします。
- range:インデックスの範囲検索です。
- index_subquery:サブクエリで ref を使用します。
- unique_subquery:サブクエリで eq_ref を使用します。
- ref_or_null:null に対するインデックスの最適化の ref です。
- fulltext:全文検索を使用します。
- ref:ユニークでないインデックスを使用してデータを検索します。
- eq_ref:結合クエリで主キーまたはユニークインデックスを使用します。
- const:主キーを where の後に条件クエリとして配置すると、MySQL オプティマイザはこのクエリを定数に最適化できます。
結論#
異なるMySQL
バージョンでは、インデックスの無効化戦略も異なる場合があります。
ほとんどのインデックスの無効化は明確ですが、一部のインデックスの無効化はMySQL
のバージョンによって異なる場合があります。
したがって、具体的な問題に対して具体的な分析を行うために、実践中に研究を行う必要があります。正確な判断ができない場合は、explain
を使用して検証することができます。