Mysql의 실행계획이라 함은 데이터베이스가 SQL을 실행할 때 내부적으로 처리하는 방법이 있는데, 이 실행계획을 확인하여 쿼리를 튜닝할 수도 있다. → 2. 실행계획
하지만, EXPLAIN
은 실행 결과에 기반한 것이 아닌 예측에 기반하기 때문에, 정확하게 확인할 수 없다. 때문에, 실행 결과에 기반하는 EXPLAIN ANALYZE
기법을 사용하여 쿼리를 분석할 수 있도록 한다.
위에서 말했듯이 EXPLAIN은 예측 기반으로 실행계획을 알려주기 때문에 정확한 확인이 어렵다. 때문에 실행 결과에 기반하여 실행계획을 알려주는 EXPLAIN ANALYZE의 분석이 더 정확하다. 그렇다고, 무조건 EXPLAIN ANALYZE가 좋지만은 않다. 실제로 쿼리를 실행하여 실행 시간, 행수 등을 측정하기 때문에 매우 느린 쿼리를 실행한다면 부하를 많이 받게 되기 때문에, 적절히 사용할 줄 알아야한다.
EXPLAIN
: 쿼리를 실행하지 않고, 실행 과정을 예측EXPLAIN ANALYZE
: 쿼리를 실행하고 실행 과정을 분석실행 방법은 간단하다. SQL 앞에 EXPLAIN ANALYZE 키워드를 추가하면 된다.
EXPLAIN ANALYZE
select
urls.type as type,
count(*)
from user_rate_limit_setting urls
where urls.status = 'DEACTIVATED'
group by urls.type;
결과는 아래와 같이 나온다.
-> Table scan on <temporary> (actual time=116..116 rows=1 loops=1)
-> Aggregate using temporary table (actual time=116..116 rows=1 loops=1)
-> Filter: (urls.`status` = 'DEACTIVATED') (cost=48634 rows=48049) (actual time=0.0934..116 rows=264 loops=1)
-> Table scan on urls (cost=48634 rows=480493) (actual time=0.0859..90.4 rows=500002 loops=1)