Documentation Home
MySQL 5.6 リファレンスマニュアル
Download this Manual
PDF (US Ltr) - 27.1Mb
PDF (A4) - 27.1Mb
EPUB - 7.5Mb
HTML Download (TGZ) - 7.2Mb
HTML Download (Zip) - 7.2Mb


13.8.2 EXPLAIN 構文

{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       |                |
+------------+----------+------+-----+---------+----------------+

DESCRIBESHOW COLUMNS のショートカットです。これらのステートメントはまた、ビューに関する情報も表示します。SHOW COLUMNS の説明では、出力カラムに関してより多くの情報が提供されます。セクション13.7.5.6「SHOW COLUMNS 構文」を参照してください。

デフォルトでは、DESCRIBE は、そのテーブル内のすべてのカラムに関する情報を表示します。col_name (指定されている場合) は、そのテーブル内のカラムの名前です。この場合、このステートメントは、指定されたカラムの情報のみを表示します。wild (指定されている場合) は、パターン文字列です。これには、SQL の%_のワイルドカード文字を含めることができます。この場合、このステートメントは、その文字列に一致する名前を持つカラムの出力のみを表示します。スペースやその他の特殊文字が含まれていないかぎり、この文字列を引用符で囲む必要はありません。

DESCRIBE ステートメントは、Oracle との互換性のために提供されています。

また、SHOW CREATE TABLESHOW TABLE STATUS、および SHOW INDEX ステートメントでは、テーブルに関する情報も提供されます。セクション13.7.5「SHOW 構文」を参照してください。

実行計画に関する情報の取得

EXPLAIN ステートメントは、MySQL がステートメントをどのように実行するかに関する情報を提供します。

  • MySQL 5.6.3 現在、EXPLAIN に使用できる説明可能なステートメントは、SELECTDELETEINSERTREPLACE、および 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 構文」を参照してください。


User Comments
Sign Up Login You must be logged in to post a comment.