Computer >> 컴퓨터 >  >> 프로그래밍 >> MySQL

MySQL EXPLAIN 키워드는 쿼리를 실행할까요, 아니면 단순히 설명만 할까요?

MySQL EXPLAIN 키워드의 역할

MySQL의 EXPLAIN 키워드는 쿼리를 실제로 실행하지 않습니다. 대신 MySQL이 해당 쿼리를 어떻게 실행할 것인지에 대한 실행 계획(execution plan)을 보여주는 역할을 합니다. 이를 통해 인덱스 사용 여부, 조인 방식, 스캔되는 예상 행 수 등을 미리 확인할 수 있으며, 쿼리 성능 분석과 최적화에 필수적인 도구로 활용됩니다.

실제 예제를 통해 EXPLAIN의 동작 방식을 살펴보겠습니다.

1. 테이블 생성

먼저 예제로 사용할 테이블을 생성합니다.

mysql> create table DemoTable1375
    -> (
    -> Id int NOT NULL AUTO_INCREMENT PRIMARY KEY,
    -> FirstName varchar(20),
    -> INDEX FIRST_INDEX(FirstName)
    -> );
Query OK, 0 rows affected (0.73 sec)

2. 레코드 삽입

INSERT 명령어를 사용해 테이블에 데이터를 추가합니다.

mysql> insert into DemoTable1375(FirstName) values('Chris');
Query OK, 1 row affected (0.25 sec)
mysql> insert into DemoTable1375(FirstName) values('Bob');
Query OK, 1 row affected (0.09 sec)
mysql> insert into DemoTable1375(FirstName) values('Sam');
Query OK, 1 row affected (1.06 sec)
mysql> insert into DemoTable1375(FirstName) values('David');
Query OK, 1 row affected (0.09 sec)

3. 전체 레코드 조회

SELECT 문으로 테이블의 모든 레코드를 확인합니다.

mysql> select * from DemoTable1375;

실행 결과는 다음과 같습니다.

+----+-----------+
| Id | FirstName |
+----+-----------+
|  2 | Bob       |
|  1 | Chris     |
|  4 | David     |
|  3 | Sam       |
+----+-----------+
4 rows in set (0.00 sec)

4. EXPLAIN을 사용한 실행 계획 확인

이제 앞선 SELECT 쿼리 앞에 EXPLAIN 키워드를 붙여 실행해 보겠습니다.

mysql> explain select * from DemoTable1375;

출력 결과는 다음과 같습니다.

+----+-------------+---------------+------------+-------+---------------+-------------+---------+------+------+----------+-------------+
| id | select_type | table         | partitions | type | possible_keys | key         | key_len | ref | rows | filtered | Extra       |
+----+-------------+---------------+------------+-------+---------------+-------------+---------+------+------+----------+-------------+
|  1 | SIMPLE      | DemoTable1375 | NULL       | index | NULL          | FIRST_INDEX | 63      | NULL | 4    | 100.00   | Using index |
+----+-------------+---------------+------------+-------+---------------+-------------+---------+------+------+----------+-------------+
1 row in set, 1 warning (0.03 sec)

결과 해석

위 출력에서 주목할 만한 주요 컬럼은 다음과 같습니다.

select_type: SIMPLE은 서브쿼리나 UNION 없이 단순한 SELECT 쿼리임을 의미합니다.
type: index는 인덱스 전체를 스캔하는 방식임을 나타냅니다.
key: 실제로 사용된 인덱스 이름으로, 여기서는 FIRST_INDEX가 선택되었습니다.
rows: MySQL이 조사해야 한다고 예상하는 행 수입니다.
Extra: Using index는 커버링 인덱스(covering index)를 활용해 테이블 접근 없이 인덱스만으로 결과를 얻었음을 의미합니다.

결론적으로, EXPLAIN은 쿼리를 실행하는 것이 아니라 MySQL 옵티마이저가 수립한 실행 계획을 보여주는 '설명' 도구입니다. 이를 활용하면 쿼리를 직접 실행하기 전에 성능 병목 지점을 파악하고 인덱스 전략을 개선할 수 있습니다.