{EXPLAIN | DESCRIBE | DESC}
tbl_name [col_name | wild]
{EXPLAIN | DESCRIBE | DESC}
[explain_type]
explainable_stmt
explain_type: {
EXTENDED
| PARTITIONS
| FORMAT = format_name
}
format_name: {
TRADITIONAL
| JSON
}
explainable_stmt: {
SELECT statement
| DELETE statement
| INSERT statement
| REPLACE statement
| UPDATE statement
}
DESCRIBE
ステートメントと EXPLAIN
ステートメントはシノニムです。実際には、DESCRIBE
キーワードがテーブル構造に関する情報を取得するためにより頻繁に使用されるのに対して、EXPLAIN
は、クエリー実行計画 (つまり、MySQL がクエリーをどのように実行するかの説明) を取得するために使用されます。次の説明では、DESCRIBE
および EXPLAIN
キーワードをそのような用途に従って使用しますが、MySQL パーサーはこれらを完全にシノニムとして処理します。
テーブル構造に関する情報の取得
DESCRIBE
は、テーブル内のカラムに関する情報を提供します。
mysql> DESCRIBE City;
+------------+----------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+------------+----------+------+-----+---------+----------------+
| Id | int(11) | NO | PRI | NULL | auto_increment |
| Name | char(35) | NO | | | |
| Country | char(3) | NO | UNI | | |
| District | char(20) | YES | MUL | | |
| Population | int(11) | NO | | 0 | |
+------------+----------+------+-----+---------+----------------+
DESCRIBE
は SHOW COLUMNS
のショートカットです。これらのステートメントはまた、ビューに関する情報も表示します。SHOW COLUMNS
の説明では、出力カラムに関してより多くの情報が提供されます。セクション13.7.5.6「SHOW COLUMNS 構文」を参照してください。
デフォルトでは、DESCRIBE
は、そのテーブル内のすべてのカラムに関する情報を表示します。col_name
(指定されている場合) は、そのテーブル内のカラムの名前です。この場合、このステートメントは、指定されたカラムの情報のみを表示します。wild
(指定されている場合) は、パターン文字列です。これには、SQL の「%
」と「_
」のワイルドカード文字を含めることができます。この場合、このステートメントは、その文字列に一致する名前を持つカラムの出力のみを表示します。スペースやその他の特殊文字が含まれていないかぎり、この文字列を引用符で囲む必要はありません。
DESCRIBE
ステートメントは、Oracle との互換性のために提供されています。
また、SHOW CREATE TABLE
、SHOW TABLE STATUS
、および SHOW INDEX
ステートメントでは、テーブルに関する情報も提供されます。セクション13.7.5「SHOW 構文」を参照してください。
実行計画に関する情報の取得
EXPLAIN
ステートメントは、MySQL がステートメントをどのように実行するかに関する情報を提供します。
MySQL 5.6.3 現在、
EXPLAIN
に使用できる説明可能なステートメントは、SELECT
、DELETE
、INSERT
、REPLACE
、およびUPDATE
です。MySQL 5.6.3 より前では、SELECT
が唯一の説明可能なステートメントです。説明可能なステートメントで
EXPLAIN
を使用すると、MySQL は、オプティマイザからのステートメント実行プランに関する情報を表示します。つまり、MySQL はテーブルがどのように、どんな順番で結合されているかに関する情報を含む、ステートメントを処理する方法を説明します。EXPLAIN
を使用して、実行プラン情報を取得することについては、セクション8.8.2「EXPLAIN 出力フォーマット」を参照してください。EXPLAIN EXTENDED
を使用して、追加の実行プラン情報を取得できます。セクション8.8.3「EXPLAIN EXTENDED 出力フォーマット」を参照してください。EXPLAIN PARTITIONS
は、パーティション化されたテーブルを含むクエリーの調査に役立ちます。セクション19.3.5「パーティションに関する情報を取得する」を参照してください。MySQL 5.6.5 の時点では、
FORMAT
オプションを使用して出力形式を選択できます。TRADITIONAL
は表形式で出力を表示します。FORMAT
オプションが存在しない場合、これはデフォルトです。JSON
フォーマットは JSON フォーマットで情報を表示します。FORMAT = JSON
を使用すると、出力には拡張されたパーティション情報が含まれます。
EXPLAIN
によって、インデックスを使用して行を見つけることで、ステートメントが高速に実行されるように、テーブルにインデックスを追加するべき場所がわかります。また、EXPLAIN
を使用して、オプティマイザがテーブルを最適な順序で結合しているかどうかを確認することもできます。SELECT
ステートメントでテーブルが指定されている順序に対応する結合順序を使用するように、オプティマイザにヒントを提供するには、ステートメントを SELECT
だけでなく、SELECT STRAIGHT_JOIN
で始めます。(セクション13.2.9「SELECT 構文」を参照してください。)
インデックスが使われるはずであると思うタイミングでそれらが使われていない問題がある場合、ANALYZE TABLE
を実行して、オプティマイザが行う選択に影響する可能性があるキーのカーディナリティーなどのテーブル統計を更新します。セクション13.7.2.1「ANALYZE TABLE 構文」を参照してください。