EXPLAINコマンドの使用方法
このコマンドを使用する非常に簡単な例を次に示します。

データベーススキーマ:
(ユーザーとユーザーのテーブル)

(アドレス付きのテーブル)

この例では、識別子(userid)に基づいてユーザーデータを選択します。
EXPLAINリクエストを実行した結果、次のようになります。
可変 | 価値 |
![]() | クエリ内のテーブルの識別子(ID)。 EXPLAINは、クエリ内のテーブルごとに1つのレコードを作成します。 |
![]() | 可能な値は、SIMPLE、PRIMARY、UNION、DEPENDENT UNION、SUBSELECT、およびDERIVEDです。 |
![]() | MySQLがデータを読み取るテーブルの名前 |
![]() | MySQLが使用する結合のタイプ。 可能な値は、eq_ref、ref、range、index、またはallです。 |
![]() | MySQLがテーブル内の行を選択するために使用できるインデックスのリスト(インデックスがない場合はNULL)。 |
![]() | MySQLが使用するインデックスの名前(可能なすべてのインデックスをチェックした後)。 |
![]() | バイト単位のキーサイズ。 |
![]() | キーとの比較に使用される列または値。 |
![]() | MySQLがリクエストを処理するためにチェックする必要がある行の数。 |
![]() | リクエストに関する追加情報。 |
この例は非常に簡単です。 主キー(userid)で検索しますが、条件に合ったレコードは1つしかありません(rows変数は1です)。
より高度な例を次に示します。

このリクエストは最初のリクエストよりも高度です。 ユーザーIDに基づいてユーザーとアドレステーブルを結合します。 ユーザーIDフィールドはユーザーテーブルのプライマリキーですが、アドレステーブルのインデックスではありません。 この場合のEXPLAINコマンドの実行結果は次のようになります。
(ユーザーテーブル)
タイプ:const
可能なキー:プライマリ
参照:const
(テーブルアドレス)
タイプ:すべて
可能なキー:(なし)
参照:(なし)
最初のテーブルが最適化されます。 主キーは、リクエストの実行に使用されます。 2番目のテーブルは最適化されていません。 typeパラメーターの値はすべてで、Posible_keysは空です。つまり、全表スキャンが実行されます。 2番目のテーブルのユーザーフィールドにインデックスを追加すると、最適化されます。
2番目のテーブルを最適化した後のEXPLAINコマンドの出力は次のとおりです。
(ユーザーテーブル)
タイプ:const
可能なキー:プライマリ
参照:const
(テーブルアドレス)
タイプ:const
可能なキー:プライマリ
参照:const
EXPLAINコマンドの詳細については、MySQLの公式ドキュメント( dev.mysql.com/doc/refman/5.0/en/explain.html)を参照してください。