본문 바로가기

Database/MySQL

mysql explain을 이용한 실행계획을 확인하자

MySQL의 `EXPLAIN`은 SQL 쿼리의 실행 계획을 확인하는데 사용되는 명령어입니다. `EXPLAIN`을 사용하면 MySQL 옵티마이저가 쿼리를 어떻게 처리하는지, 쿼리의 테이블 접근 방법, 조인 순서, 사용하는 인덱스 등에 대한 정보를 제공합니다. 이를 통해 쿼리의 성능을 최적화하고 느린 쿼리를 발견하는데 도움을 줍니다.

`EXPLAIN`을 사용하는 방법은 간단합니다. 다음과 같이 `EXPLAIN` 키워드 다음에 실행하려는 쿼리를 작성하여 실행합니다:

EXPLAIN SELECT column1, column2 FROM table_name WHERE condition;



`EXPLAIN`은 쿼리 실행 계획에 대한 정보를 표 형식으로 반환합니다. 반환되는 컬럼들의 의미는 다음과 같습니다:

1. `id`: 각 쿼리 실행 단계에 대한 순차적인 번호입니다.
2. `select_type`: 쿼리의 SELECT 타입을 나타냅니다. (예: SIMPLE, PRIMARY, SUBQUERY 등)
3. `table`: 쿼리에서 사용하는 테이블 이름입니다.
4. `partitions`: 쿼리에서 참조하는 테이블 파티션 정보입니다.
5. `type`: 테이블 접근 방법을 나타냅니다. (예: ALL, INDEX, RANGE 등)
6. `possible_keys`: 옵티마이저가 고려한 인덱스들의 목록입니다.
7. `key`: 실제로 사용된 인덱스의 이름입니다.
8. `key_len`: 사용된 인덱스의 길이를 나타냅니다.
9. `ref`: 인덱스의 비교 대상을 나타냅니다.
10. `rows`: 해당 단계에서 검색되는 행(row)의 수를 예상합니다.
11. `filtered`: `WHERE` 조건을 통과한 행(row)의 비율입니다.
12. `Extra`: 기타 추가 정보를 제공합니다.

`EXPLAIN`의 결과를 분석하여 쿼리의 성능을 최적화할 수 있습니다. 예를 들어, `type`이 `ALL`로 표시되면 테이블의 모든 레코드를 스캔하는 풀 테이블 스캔(Full Table Scan)이 발생하고 있는 것으로 간주할 수 있습니다. 이런 경우 인덱스를 추가하여 성능을 개선할 수 있습니다.

`EXPLAIN`은 개발자나 DBA가 쿼리 실행 계획을 이해하고 최적화하는데 유용한 도구입니다. 쿼리가 복잡하고 성능 이슈가 발생하는 경우 `EXPLAIN`을 사용하여 문제를 파악하고 최적화하는데 활용하시기 바랍니다.

반응형