8.8.3 EXPLAIN EXTENDED 출력 포맷
EXPLAIN
을 EXTENDED
키워드를 함께 사용하면 출력에 다른 경우 표시되지 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 EXTENDED
는 SELECT
, DELETE
, INSERT
, REPLACE
및 UPDATE
문에서 사용할 수 있습니다. 그러나 다음 SHOW WARNINGS
문은 SELECT
문에 대해서만 비어 있지 않은 결과를 표시합니다. MySQL 5.6.3 이전에서는 EXPLAIN EXTENDED
는 SELECT
문에서만 사용할 수 있습니다.
SHOW WARNINGS
에 의해 표시되는 문은 쿼리 재 작성과 최적화 작업에 대한 정보를 제공하는 특별한 마커가 포함될 수 있기 때문에 문은 반드시 유효한 SQL 대신 실행되는 것을 목적으로하고 있습니다 하지 않습니다. 출력은 최적화에 의해 채택 된 작업에 대한 추가 SQL이 아닌 설명의 메모를 제공하는 Message
값이있는 행이 포함될 수 있습니다.
다음 목록은 SHOW WARNINGS
에 의해 표시되고 EXTENDED
출력에 표시 될 수있는 특별한 표식을 설명합니다.
<auto_key>
임시 테이블에 자동으로 생성되는 키.
<cache>(
expr
)식 (스칼라 서브 쿼리 등)가 한 번 실행되어 나중에 사용하기 위해 결과 값이 메모리에 저장됩니다. 여러 값으로 구성된 결과의 경우, 임시 테이블이 작성 될 수 있으며, 대신
<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
이외의 출력에서N
의id
값을 가진 행에 연결됩니다.outer_tables
semi join (inner_tables
)준 병합 작업.
inner_tables
는 꺼내지지 않았던 테이블을 나타냅니다. 섹션 8.2.1.18.1 '준 조인 변환에 의한 서브 쿼리의 최적화 " 를 참조하십시오.<temporary table>
이것은 중간 결과를 캐시하기 위해 작성되는 내부 임시 테이블을 나타냅니다.
일부 테이블이 const
또는 system
형인 경우,이 테이블에서 컬럼을 포함 식은 최적화에 의해 조기에 평가되어 표시되는 문에 포함되지 않습니다. 그러나 FORMAT=JSON
에서는 일부 const
테이블 액세스가 상수 값을 사용하는 ref
액세스로 표시됩니다.