오늘은 MySQL에서 실제 실행계획을 확인하는 법을 살펴보겠습니다. 실제 성능 개선에 있어서, 개선전, 개선후 결과를 측정하기에 매우 유용한 방법이고, 성능 개선에 가장 도움이 되는 실행 계획을 보는 방법이 아닐까 싶습니다.
연습과 테스트를 위한 DB 구성이 필요하다면 아래 글을 참고해주세요.
1. EXPLAIN ANALYZE
MySQL에서 실제 실행된 SQL의 실행계획을 보기 위해서는 EXPLAIN ANALYZE를 사용합니다. 아래와 같이 EXPLAIN ANALYZE를 추가해서 SQL을 실행하면, SQL이 실제 실행이 되면서, 실제 사용한 실행계획을 확인할 수 있습니다. (이전글에서 살펴본 실행계획은 예상 실행계획입니다.)
EXPLAIN ANALYZE
SELECT T2.CUS_ID, T2.CUS_NM ,T1.*
FROM MYTUNDB.T_ORD_BIG T1
INNER JOIN MYTUNDB.M_CUS T2 ON (T2.CUS_ID = T1.CUS_ID)
WHERE T1.ORD_SEQ <= 10;
위 SQL을 실행하면, SQL의 결과대신에 아래와 같은 실행계획이 출력됩니다. 실행 계획만 출력되지만 실제 SQL은 실행된 것과 다름없습니다.
-> Nested loop inner join (cost=14.03 rows=10) (actual time=0.871..0.898 rows=10 loops=1)
-> Filter: (mytundb.t1.ORD_SEQ <= 10) (cost=3.03 rows=10) (actual time=0.074..0.089 rows=10 loops=1)
-> Index range scan on T1 using PRIMARY (cost=3.03 rows=10) (actual time=0.070..0.080 rows=10 loops=1)
-> Single-row index lookup on T2 using PRIMARY (CUS_ID=mytundb.t1.CUS_ID) (cost=1.01 rows=1) (actual time=0.080..0.080 rows=1 loops=10)
아래의 MySQL 블로그를 통해 실제 실행계획에서 얻을 수 있는 정보를 알 수 있습니다.
https://dev.mysql.com/blog-archive/mysql-explain-analyze/
위 블로그에서 중요한 부분만 정리하면, 아래의 내용일 거 같습니다.
- Actual time to get first row (in milliseconds)
- Actual time to get all rows (in milliseconds)
- Actual number of rows read
- Actual number of loops
오늘 살펴볼 내용은 여기까지입니다.
추가로, 제가 직접 만든 무료 MySQL 튜닝툴을 소개합니다.~
https://sweetquant.tistory.com/457
'SQL > MySQL' 카테고리의 다른 글
[MySQL튜닝]B Tree 인덱스 (0) | 2022.10.24 |
---|---|
[MySQL튜닝]인덱스 왜 빨라? (0) | 2022.10.21 |
[MySQL튜닝]인덱스 관련 문법 (0) | 2022.10.20 |
[MySQL튜닝]인덱스를 만들어 보자 (0) | 2022.10.20 |
[MySQL튜닝]Visual하게 실행 계획 보기(Feat.Workbench) (0) | 2022.10.18 |
[MySQL튜닝]실행 계획을 확인하는 세 가지 방법 (0) | 2022.10.18 |
[MySQL튜닝]튜닝 환경을 준비하자 (0) | 2022.10.14 |
MySQL 프로시저 소스 확인하기 (0) | 2022.10.11 |