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


MySQL 5.6 リファレンスマニュアル  /  ...  /  EXPLAIN EXTENDED 出力フォーマット

8.8.3 EXPLAIN EXTENDED 出力フォーマット

EXPLAINEXTENDED キーワードを付けて使用すると、出力に、ほかの場合に表示されない filtered カラムが含まれます。このカラムは、テーブル条件によってフィルタ処理されるテーブル行の推定の割合を示します。さらに、ステートメントは、EXPLAIN ステートメントに続けて SHOW WARNINGS ステートメントを発行することで表示できる追加の情報を生成します。SHOW WARNINGS 出力の Message 値には、オプティマイザが SELECT ステートメント内のテーブルおよびカラム名をどのように修飾するか、書き換えおよび最適化ルールの適用後に SELECT がどのように見えるか、および場合によって最適化プロセスに関するその他のメモが表示されます。

これは拡張された出力の例です。

mysql> EXPLAIN EXTENDED
    -> SELECT t1.a, t1.a IN (SELECT t2.a FROM t2) FROM t1\G
*************************** 1. row ***************************
           id: 1
  select_type: PRIMARY
        table: t1
         type: index
possible_keys: NULL
          key: PRIMARY
      key_len: 4
          ref: NULL
         rows: 4
     filtered: 100.00
        Extra: Using index
*************************** 2. row ***************************
           id: 2
  select_type: SUBQUERY
        table: t2
         type: index
possible_keys: a
          key: a
      key_len: 5
          ref: NULL
         rows: 3
     filtered: 100.00
        Extra: Using index
2 rows in set, 1 warning (0.00 sec)

mysql> SHOW WARNINGS\G
*************************** 1. row ***************************
  Level: Note
   Code: 1003
Message: /* select#1 */ select `test`.`t1`.`a` AS `a`,
         <in_optimizer>(`test`.`t1`.`a`,`test`.`t1`.`a` in
         ( <materialize> (/* select#2 */ select `test`.`t2`.`a`
         from `test`.`t2` where 1 having 1 ),
         <primary_index_lookup>(`test`.`t1`.`a` in
         <temporary table> on <auto_key>
         where ((`test`.`t1`.`a` = `materialized-subquery`.`a`))))) AS `t1.a
         IN (SELECT t2.a FROM t2)` from `test`.`t1`
1 row in set (0.00 sec)

MySQL 5.6.3 現在、EXPLAIN EXTENDEDSELECTDELETEINSERTREPLACE、および UPDATE ステートメントで使用できます。ただし、次の SHOW WARNINGS ステートメントは、SELECT ステートメントに対してのみ、空でない結果を表示します。MySQL 5.6.3 より前では、EXPLAIN EXTENDEDSELECT ステートメントでのみ使用できます。

SHOW WARNINGS によって表示されるステートメントには、クエリーの書き換えやオプティマイザのアクションに関する情報を提供する特別なマーカーが含まれることがあるため、ステートメントは必ずしも有効な SQL ではなく、実行されることを目的としていません。出力には、オプティマイザによってとられたアクションに関する追加の SQL でない説明のメモを提供する Message 値のある行が含まれることもあります。

次のリストに、SHOW WARNINGS によって表示され、EXTENDED 出力に示される可能性がある特別なマーカーを説明します。

  • <auto_key>

    一時テーブルの自動的に生成されるキー。

  • <cache>(expr)

    式 (スカラーサブクエリーなど) が 1 回実行され、あとで使用するために、結果の値がメモリーに保存されます。複数の値から構成される結果の場合は、一時テーブルが作成されることがあり、代わりに <temporary table> が表示されます。

  • <exists>(query fragment)

    サブクエリー述語は EXISTS 述語に変換され、サブクエリーは EXISTS 述語と一緒に使用できるように変換されます。

  • <in_optimizer>(query fragment)

    これは、ユーザーにとっては意味がない内部オプティマイザオブジェクトです。

  • <index_lookup>(query fragment)

    対象の行を見つけるためにインデックスルックアップを使用して、クエリーフラグメントが処理されます。

  • <if>(condition, expr1, expr2)

    条件が true の場合は expr1、そうでない場合は expr2 に評価されます。

  • <is_not_null_test>(expr)

    式が NULL に評価されないことを確認するためのテスト。

  • <materialize>(query fragment)

    サブクエリーの実体化が使用されます。

  • `materialized-subquery`.col_name, `materialized subselect`.col_name

    サブクエリーの評価の結果を保持するために実体化された内部一時テーブル内のカラム col_name への参照。

  • <primary_index_lookup>(query fragment)

    対象の行を見つけるために主キールックアップを使用して、クエリーフラグメントが処理されます。

  • <ref_null_helper>(expr)

    これは、ユーザーにとっては意味がない内部オプティマイザオブジェクトです。

  • /* select#N */ select_stmt

    SELECT は、EXTENDED EXPLAIN 以外の出力で、Nid 値を持つ行に関連付けられます。

  • outer_tables semi join (inner_tables)

    準結合操作。inner_tables は、取り出されなかったテーブルを示します。セクション8.2.1.18.1「準結合変換によるサブクエリーの最適化」を参照してください。

  • <temporary table>

    これは、中間結果をキャッシュするために作成される内部一時テーブルを表します。

一部のテーブルが const または system 型である場合、これらのテーブルからのカラムを含む式は、オプティマイザによって早期に評価され、表示されるステートメントに含まれません。ただし、FORMAT=JSON では、一部の const テーブルアクセスが定数値を使用する ref アクセスとして表示されます。


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