table 칼럼
- MySQL 서버의 실행 계획은 단위 SELECT 쿼리 기준이 아니라 테이블 기준으로 표시된다.
- 테이블의 이름에 별칭이 부여된 경우에는 별칭이 표시된다.
FROM 절이 없는 경우
SELECT NOW();
SELECT NOW() FROM DUAL;
- MySQL 옵티마이저는 두 번째 쿼리가 요청되면 “FROM DUAL” 부분을 제거하고 첫 번째 쿼리와 동일하게 변형해서 처리한다.
- 오라클 RDBMS에 익숙한 사용자를 위해 내부적으로 DUAL 테이블이 있는 것처럼 작동할 뿐이다.
- 이 같이 별도의 테이블을 사용하지 않는 SELECT 쿼리인 경우,
table
칼럼에 NULL이 표시된다.
임시 테이블
table
칼럼에 “<>”로 둘러싸인 이름이 명시되는 경우가 많은데, 이 테이블은 임시 테이블을 의미한다.
<derived N>
또는 <union M, N>
등
- “<>” 안에 항상 표시되는 숫자는 단위 SELECT 쿼리의 id 값을 지칭한다.
- 예를 들어,
<derived 2>
라면 단위 SELECT 쿼리의 id 값이 2인 실행 계획으로부터 만들어진 파생 테이블을 가리킨다.
실행 계획 분석하기
- id 칼럼과
select_type
, table
칼럼은 실행 계획의 각 라인에 명시된 테이블이 어떤 순서대로 실행되는지를 판단하는 근거를 표시해준다.
- MySQL 8.0 버전에서는 서브쿼리에 대한 최적화가 많이 보왔됐다.
select_type
이 MATERIALIZED
인 실행 계획에서는 table
칼럼에 <subquery N>
과 같은 값이 표시된다.
- 이는 서브쿼리의 결과를 구체화(Materialization)해서 임시 테이블로 만들었다는 의미이며, 실제로는
<derived N>
과 같은 방법으로 해석하면 된다.
Reference
참고 서적
📔 Real MySQL 8.0