Featured image of post 10.2 실행 계획 - 실행 계획 확인

10.2 실행 계획 - 실행 계획 확인

Real MySQL 8.0

MySQL 실행 계획은 DESC 또는 EXPLAIN 명령으로 확인할 수 있다. 또한 MySQL 8.0 부터 EXPLAIN 명령에 사용할 수 있는 새로운 옵션이 추가되었다.

실행 계획 출력 포맷

이전 버전에서는 EXPLAIN EXTENDED, EXPLAIN PARTITIONS 명령이 구분되어 있었지만 8.0 버전부터는 모든 내용이 통합되어 보이도록 개선되면서 옵션이 문법에서 제거되었다.

또한 FORMAT 옵션을 사용해 실행 계획의 표시 방법을 JSON, TREE, 단순 테이블 형태로 선택할 수 있다.

1
2
3
4
5
6
7
8
9
/* 
* 단순 테이블
*/
EXPLAIN
SELECT *
FROM employees e
    INNER JOIN salaries s ON s.emp_no=e.emp_no
WHERE first_name='ABC'
;

1
2
3
4
5
6
7
8
9
/* 
* 트리
*/
EXPLAIN FROMAT=TREE
SELECT *
FROM employees e
    INNER JOIN salaries s ON s.emp_no=e.emp_no
WHERE first_name='ABC'
;

1
2
3
4
5
6
7
8
9
/* 
* JSON
*/
EXPLAIN FORMAT=JSON
SELECT *
FROM employees e
    INNER JOIN salaries s ON s.emp_no=e.emp_no
WHERE first_name='ABC'
;

쿼리의 실행 시간 확인

MySQL 8.0.18 버전부터는 쿼리의 실행 계획과 단계별 소요된 시간 정보를 확인할 수 있는 EXPLAIN ANALYZE 기능이 추가되었다.

기존 SHOW PROFILE 명령과 다르게 실행 계획의 단계별로 소요된 시간 정보를 보여주며, 항상 TREE 형식으로만 제공되어 FORMAT 옵션은 사용할 수 없다.

EXPLAIN ANALYZE 명령의 결과에는 단계별로 실제 소요된 시간과 처리한 레코드 건수, 반복 획수가 표시된다.

EXPAIN 명령과 달리 실행 계획만 추출하는 것이 아니라 실제 쿼리를 실행하고 사용된 실행 계획과 소요된 시간을 보여준다. 그래서 EXPLAIN ANALYZE 으로 실행하였을 때 실제로 쿼리가 모두 완료 되어야 확인할 수 있으므로, 실행 시간이 아주 많이 걸리는 쿼리라면 EXPLAIN 명령을 통해 확인한 실행 계획을 바탕으로 1차 튜닝 후에 EXPLAIN ANALYZE 명령을 실행하는 것이 좋다.