SELECT
쿼리 기준이 아닌 테이블 기준으로 표시된다.<derived N>
또는 <union M,N>
과 같이 <>
로 둘러싸인 것은 임시 테이블을 의미한다.
SELECT
쿼리의 id 값을 지칭한다.<derived2>
라고 표시되었다면 단위 쿼리 id 값이 2인 실행 계획으로부터 만들어진 파생 테이블을 가리킨다.SELECT * FROM
(SELECT de.emp_no FROM dept_emp de GROUP BY de.emp_no) tb,
employees e
WHERE e.emp_no=tb.emp_no;
id | select_type | table | type | key | rows | Extra |
---|---|---|---|---|---|---|
1 | PRIMARY | ALL | NULL | 33143 | NULL | |
1 | PRIMARY | e | eq_ref | PRIMARY | 1 | NULL |
2 | DERIVED | de | index | ix_empno_fromdate | 33143 | Using index |
<derived2>
이니 이 라인보다 id=2인 라인이 먼저 실행되고 그 결과가 파생 테이블로 준비돼야 한다는 것을 알 수 있다.dept_emp
테이블을 읽어 파생 테이블을 생성하는 것을 알 수 있다.<drived2>
인 라인이 위에 표시되었으므로 이 라인이 드라이빙 테이블로 조인되었다는 것을 알 수 있다.EXPLAIN
명령으로 파티션 관련 실행 계획까지 모두 확인할 수 있다.hire_date
칼럼값을 기준으로 파티션을 나눈 예제이다.
hire_date
를 파티션 키로 사용했고 이 칼럼은 프라이머리 키의 일부로 되어 있기 때문에 제약사항을 어기지 않았다.CREATE TABLE employees (
...
PRIMARY KEY (emp_no, hire_date)
) PARTITION BY RANGE COLUMNS(hire_date)
(PARTITION p1986_1990 VALUES LESS THAN ('1990-01-01'),
...
PARTITION p2001_2005 VALUES LESS THAN ('2006-01-01'));
EXPLAIN SELECT * FROM employees
WHERE hire_date BETWEEN '1999-11-15' AND '2000-01-15';
id | select_type | table | partitions | type | rows |
---|---|---|---|---|---|
1 | SIMPLE | employees | p1996_2000,p2001_2005 | ALL | 21743 |