실행 계획 확인

공부하는 감자·2024년 4월 26일
0

MySQL

목록 보기
63/74
post-thumbnail

실행 계획 확인

  • MySQL 서버의 실행 계획은 DESC 또는 EXPLAIN 명령으로 확인할 수 있다.
  • MySQL 8.0 버전부터는 EXPLAIN 명령에 사용할 수 있는 새로운 옵션이 추가됐다.

실행 계획 출력 포맷

  • MySQL 8.0 버전부터는 모든 내용이 통합되어 보이도록 개선되었다.
    • EXPLAINEXTENDED 옵션과 PARTITIONS 옵션은 문법에서 제거되었다.
  • MySQL 8.0 버전부터는 FORMAT 옵션을 사용해 다음과 같이 실행 계획의 표시 방법을 선택할 수 있다.
    -- 테이블 포맷 표시
    EXPLAIN
    SELECT *
    FROM employees e
    	INNER JOIN salaries s ON s.emp_no=e.emp_no
    WHERE first_name='ABC';
    
    -- 트리 포맷 표시
    EXPLAIN FORMAT=TREE
    SELECT *
    FROM employees e
    	INNER JOIN salaries s ON s.emp_no=e.emp_no
    WHERE first_name='ABC';
    
    -- JSON 포맷 표시
    EXPLAIN FORMAT=JSON
    SELECT *
    FROM employees e
    	INNER JOIN salaries s ON s.emp_no=e.emp_no
    WHERE first_name='ABC';
  • EXPLAIN 명령에 사용되는 포맷 옵션별로 개인의 선호도 또는 표시되는 정보의 차이가 있을 수 있지만, MySQL 옵티마이저가 수립한 실행 계획의 큰 흐름을 보여주는 데는 큰 차이가 없다.

TREE 포맷의 실행 계획

  • TREE 포맷의 실행 계획에서 들여쓰기는 호출 순서를 의미하며, 실제 실행 순서는 다음 기준으로 읽으면 된다.
    • 들여쓰기가 같은 레벨에서는 상단에 위치한 라인이 먼저 실행
    • 들여쓰기가 다른 레벨에서는 가장 안쪽에 위치한 라인이 먼저 실행

쿼리의 실행 시간 확인

SHOW PROFILE

  • 어떤 부분에서 시간이 많이 소요되는지 확인할 수 있다.
  • 하지만 실행 계획의 단계별로 소요된 시간 정보를 보여주진 않는다.

EXPLAIN ANALYZE

EXPLAIN ANALYZE
SELECT ...
  • MySQL 8.0.18 버전부터 추가되었다.
  • EXPLAIN 명령과 달리 실행 계획만 추출하는 것이 아니라 실제 쿼리를 실행하고 사용된 실행 계획과 소요된 시간을 보여준다.
  • 쿼리의 실행 계획과 단계별 소요된 시간 정보를 확인할 수 있다.
  • 항상 결과를 TREE 포맷으로 보여주기 때문에, FORMAT 옵션을 사용할 수 없다.
  • EXPLAIN ANALYZE 명령의 결과에는 단계별로 다음 항목들이 표시된다.
    • 실제 소요된 시간 (actual time)
    • 레코드 건수 (rows)
    • 반복 횟수 (loops)

Reference

참고 서적

📔 Real MySQL 8.0

profile
책을 읽거나 강의를 들으며 공부한 내용을 정리합니다. 가끔 개발하는데 있었던 이슈도 올립니다.

0개의 댓글