1. 개요

서비스를 사용하는 유저들은 속도가 느린 것을 싫어한다. 바로바로 데이터를 확인하고 싶어하기 때문이다. 때문에 속도 개선을 하는 것은 개발자로서 빠질 수 없는 태스크중 하나이다. 응답 속도를 향상시키기 위해 애플리케이션 로직을 잘 구현했지만, 여전히 느리다면 데이터베이스 쿼리를 의심해봐야 한다. 쿼리 튜닝만 해도 몇초 이상이 걸리던 로직을 ms내 시간대로 최적화할 수 있기 때문이다. 이때 최적화에 유용하게 사용되는 방법은 쿼리 실행계획을 확인하는 것이다.


2. 실행계획

SQL이 데이터베이스에서 어떻게 처리되는지 확인하는 것은 중요하다. 이때 확인하는 것이 실행계획이다. 기본적으로 SQL을 작성하고 실행을 하게 되면 데이터베이스가 내부적으로 처리할 수 있는 과정이 실행되는데, 이때 많은 단계를 거쳐 실제 데이터를 찾는 경우가 발생할 수 있다. 이것을 Explain 실행계획을 통해 파악할 수 있다.

EXPLAIN SELECT ... FROM ...

2-1. Explain 보는 법

SQL문은 아래와 같다.

explain
select
    *
from user u
left join user_rate_limit_setting urls on u.id = urls.userId;

실행결과는 아래와 같다.

+--+-----------+-----+----------+----+------------------------------+----+-------+----+----+--------+------------------------------------------+
|id|select_type|table|partitions|type|possible_keys                 |key |key_len|ref |rows|filtered|Extra                                     |
+--+-----------+-----+----------+----+------------------------------+----+-------+----+----+--------+------------------------------------------+
|1 |SIMPLE     |u    |null      |ALL |null                          |null|null   |null|1   |100     |null                                      |
|1 |SIMPLE     |urls |null      |ALL |IDX_c4bd0330a997e1cbb833a34cd7|null|null   |null|2   |100     |Using where; Using join buffer (hash join)|
+--+-----------+-----+----------+----+------------------------------+----+-------+----+----+--------+------------------------------------------+

여기서 중요한 필드만 확인해보자면

2-1-1. select_type ⭐