EXPLAIN을 실행하면 쿼리 문장의 특성에 따라 표 형태로 된 1줄 이상의 결과가 표시된다. 표의 각 라인(레코드)은 쿼리 문장에서 사용된 테이블(서브 쿼리로 임시 테이블을 생성한 경우 그 임시 테이블까지 포함)의 개수만큼 출력된다.
실행 순서는 위에서 아래로 순서대로 표시된다. id 순서(오름차순)으로 먼저 실행된거고, 바깥 부분이거나 먼저 접근한 테이블임.
만약 하나의 SELECT 문장 안에서 여러 개의 테이블을 조인하면 조인되는 테이블의 개수만큼 실행 계획 레코드가 출력되지만 같은 id가 부여된다.
select_type
PRIMARY : 그냥 가장 밖에 있는부분(서브쿼리있을때)
DERIVED: From절에 있는 subquery
UNION : union 사용한 쿼리절
UNION_RESULT: UNION 값이 임시테이블에 저장되며, 임시테이블을 표현할때 사용
MATERIALIZED : MySQL 5.6 버전에 추가된 셀렉트 타입이다. 그 이전의 버전에서는 IN 절 내에 서브쿼리가 존재할 경우 매 레코드마다 서브쿼리를 실행시키는 형태로 수행되었다. 생각만해봐도 비효율적임을 알 수 있다. 5.6 에서부터 추가된 MATERIALIZED는 IN 절 내의 서브쿼리를 임시테이블로 만들어 조인을 하는 형태로 최적화를 해준다. DERIVED와 비슷하다고 생각하면 될 것 같다.
기본 개념
select_type
table
type
possible_key
key
row
filtered
extra 칼럼
ref
reference