728x90
MySQL 옵티마이저 실행계획은 쿼리를 효율적으로 실행하기 위해 MySQL이 사용하는 계획을 의미한다. 이 실행계획은 쿼리를 어떻게 처리할지에 대한 정보를 제공하며 이를 분석하면 쿼리 성능을 최적화할 수 있다.
MySQL에서 실행계획을 확인하려면 EXPLAIN 명령어를 사용한다. 이를 통해 MySQL이 쿼리를 실행하는 방식(예: 사용된 인덱스, 조인 방식, 풀스캔 여부 등)을 확인할 수 있다.
EXPLAIN 사용 방법
EXPLAIN [쿼리];
예제)
EXPLAIN SELECT * FROM employees WHERE department_id = 10;
EXPLAIN 출력 컬럼 설명
- id
- 쿼리 내 실행 단계 식별자
- 값이 클수록 먼저 실행됨
- select_type
- 쿼리의 유형
- 주요 값
- SIMPLE : 단순 쿼리, 서브쿼리 없음
- PRIMARY : 메인 쿼리
- SUBQUERY : 서브쿼리
- DERIVED : 서브쿼리의 결과가 임시 테이블로 저장됨
- table
- 접근하는 테이블 이름
- partitions
- 쿼리가 접근하는 파티션
- type
- 조인 유형 또는 테이블 액세스 방식
- 성능순 : system > const > eq_ref > ref > range > index > ALL (풀스캔)
- 주요 타입
- const : 기본키 또는 유니크키를 조건으로 하나의 행만 조회
- ref : 기본키/유니크키가 아닌 인덱스를 사용한 동등 조건 검색
- range : 인덱스를 사용해 범위 조건을 조회 (예: <, >, BETWEEN, LIKE 'abc%')
- all : 테이블을 처음부터 끝까지 탐색. 성능이 가장 낮으며 인덱스를 추가해 피해야 함.
- possible_keys
- 쿼리에 사용할 수 있는 인덱스 목록
- key
- 실제 사용된 인덱스
- key_len
- 사용된 인덱스의 길이(바이트 단위).
- ref
- 인덱스에서 비교된 컬럼 또는 상수 값.
- rows
- MySQL이 검색해야 한다고 예측하는 행 수
- 값이 클수록 성능 저하
- filtered
- 조건을 만족하는 행의 비율(%)을 추정
- Extra
- 추가 정보
- Using where : WHERE 조건을 사용
- Using index : 인덱스만 사용하여 데이터를 검색
- Using temporary : 쿼리 병합 시 임시 테이블 생성 및 사용
- Using filesort : 정렬에 필요한 인덱스가 없어 별도의 정렬 작업 수행 → 성능 저하
- 추가 정보
실행계획 분석 예시
EXPLAIN SELECT * FROM employees WHERE department_id = 10;
결과
id | select_type | table | type | possible_keys | key | key_len | ref | rows | extra |
1 | SIMPLE | employee | ref | dept_id_index | dept_id_index | 4 | const | 100 | Using where |
분석
- type : ref는 인덱스를 통해 데이터를 검색하므로 효율적
- key : dept_id_index가 사용됨
- rows : 100개의 행만 검색 예상
- Extra : Using where는 추가적인 필터링이 필요함
실행계획 최적화 팁
- 인덱스 활용 : 쿼리에 사용된 조건이나 조인 컬럼에 적절한 인덱스를 생성
- 조인 순서 변경 : 조인 순서를 바꾸어 실행계획의 type을 개선
- 서브쿼리 최적화 : 서브쿼리를 조인으로 변환
- LIMIT 사용 : 필요한 데이터만 가져와 불필요한 검색을 줄임
- ANALYZE TABLE : 테이블 통계를 최신 상태로 유지
EXPLAIN 결과를 주기적으로 점검하며 성능을 개선할 수 있다. MySQL 옵티마이저의 동작을 이해하면 성능 튜닝에 큰 도움이 된다.
반응형
'Database' 카테고리의 다른 글
아파치 카프카(Apache Kafka) - 개념 (1) | 2025.01.03 |
---|---|
DB Replication (1) | 2024.12.09 |
CDC(Change Data Capture) (1) | 2024.11.28 |
트랜잭션의 메커니즘 (0) | 2024.10.28 |
Sharding, Clustering, Replication (0) | 2024.10.23 |