10.8.3 Extended EXPLAIN Output Format (original) (raw)

10.8.3 Extended EXPLAIN Output Format

The EXPLAIN statement produces extra (“extended”) information that is not part ofEXPLAIN output but can be viewed by issuing a SHOW WARNINGS statement following EXPLAIN. Extended information is available forSELECT,DELETE,INSERT,REPLACE, andUPDATE statements.

The Message value inSHOW WARNINGS output displays how the optimizer qualifies table and column names in theSELECT statement, what theSELECT looks like after the application of rewriting and optimization rules, and possibly other notes about the optimization process.

The extended information displayable with aSHOW WARNINGS statement followingEXPLAIN is produced only forSELECT statements.SHOW WARNINGS displays an empty result for other explainable statements (DELETE,INSERT,REPLACE, andUPDATE).

Here is an example of extendedEXPLAIN output:

mysql> EXPLAIN
       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)

Because the statement displayed by SHOW WARNINGS may contain special markers to provide information about query rewriting or optimizer actions, the statement is not necessarily valid SQL and is not intended to be executed. The output may also include rows withMessage values that provide additional non-SQL explanatory notes about actions taken by the optimizer.

The following list describes special markers that can appear in the extended output displayed by SHOW WARNINGS:

When some tables are of const or system type, expressions involving columns from these tables are evaluated early by the optimizer and are not part of the displayed statement. However, with FORMAT=JSON, someconst table accesses are displayed as a ref access that uses a const value.