오늘은 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

 

[StartUP Tuning]MySQL,MariaDB SQL 튜닝툴

MySQL과 MariaDB의 SQL 튜닝을 보다 간편하게 진행할 수 있는, SUT(StartUP Tuning)를 소개합니다. SUT는 실제 MySQL 튜닝을 전문적으로 수행하기 위해 직접 만들 툴입니다. 또한 MySQL,MariaDB의 성능 개선 교육

sweetquant.tistory.com

 

 

 

+ Recent posts