DB/Mysql
🔍 MySQL 실행 계획(Execution Plan)
hoonylab
2025. 4. 8. 17:33
728x90
반응형
MySQL에서 쿼리 성능을 분석하고 최적화할 때 반드시 알아야 할 것이 실행 계획(Execution Plan) 입니다.
이 글에서는 실행 계획이 무엇인지, 어떻게 확인하고 해석하는지, 그리고 성능 향상을 위한 팁까지 상세히 설명합니다.
📌 실행 계획이란?
MySQL이 쿼리를 어떻게 실행할지 내부적으로 결정한 전략입니다.
예를 들어 어떤 인덱스를 사용할지, 어떤 테이블부터 읽을지, 조인은 어떤 방식으로 할지 등을 포함합니다.
실행 계획은 옵티마이저(Optimizer)에 의해 자동으로 결정되며, 쿼리를 최대한 빠르게 수행하기 위한 로드맵 역할을 합니다.
✅ 실행 계획 확인 방법: EXPLAIN
아래처럼 EXPLAIN
키워드를 붙이면 쿼리의 실행 계획을 확인할 수 있습니다.
EXPLAIN SELECT * FROM employees WHERE dept_no = 'd005';
id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |
---|---|---|---|---|---|---|---|---|---|
1 | SIMPLE | employees | ref | dept_no_idx | dept_no_idx | 4 | const | 15 | Using where |
🧩 주요 컬럼 설명
컬럼명 | 설명 |
---|---|
id | 쿼리 실행 순서를 나타냅니다. 숫자가 클수록 나중에 실행됩니다. |
select_type | 쿼리의 SELECT 유형 (단순 쿼리, 서브쿼리 등) |
table | 접근하는 테이블 이름 |
type | 조인의 방식 (가장 중요한 성능 지표 중 하나) |
possible_keys | 사용할 수 있는 인덱스 목록 |
key | 실제로 사용된 인덱스 |
key_len | 사용된 인덱스의 길이 (바이트 단위) |
ref | 어떤 값과 인덱스를 비교했는지 |
rows | MySQL이 예측한 읽을 행의 수 |
Extra | 추가 정보 (filesort, temporary 등) |
⚠️ type 컬럼의 중요도 (좋은 순서대로)
type
은 조인의 성능에 가장 큰 영향을 주는 요소입니다.
type 값 | 설명 |
---|---|
system | 단 하나의 row만 존재하는 테이블 (가장 빠름) |
const | 프라이머리 키 등으로 하나의 row만 조회 |
eq_ref | 조인에서 PK나 UNIQUE 인덱스를 사용해 하나의 row를 조회 |
ref | non-unique 인덱스를 사용한 조회 |
range | 인덱스를 범위 조건으로 조회 (BETWEEN, <, > 등) |
index | 인덱스를 전체 스캔 (테이블은 건드리지 않음) |
ALL | 테이블 풀스캔 (성능 최악) ❌ |
ALL이나 index는 대량의 데이터를 읽는 비효율적인 방식이므로 주의가 필요합니다.
🧠 Extra 컬럼에서 주의 깊게 볼 표현
표현 | 설명 |
---|---|
Using where | WHERE 조건을 사용함 |
Using index | 인덱스만으로 결과를 가져옴 (커버링 인덱스) ✅ |
Using temporary | 임시 테이블 생성 (성능 저하) ❌ |
Using filesort | 정렬 연산 발생 (느림) ❌ |
🧪 MySQL 8.0 이상: EXPLAIN ANALYZE
MySQL 8.0 이상에서는 EXPLAIN ANALYZE
명령으로 쿼리를 실제 실행하며 실제 소요 시간과 처리 row 수를 보여줍니다.
EXPLAIN ANALYZE SELECT * FROM employees WHERE dept_no = 'd005';
🔧 실행 계획 최적화를 위한 팁
- ✅ WHERE 조건에 사용하는 컬럼에 적절한 인덱스 추가
- ✅
SELECT *
대신 필요한 컬럼만 조회 - ✅ 가능한 경우 커버링 인덱스 활용 (Using index)
- ❌ Using temporary, Using filesort 피하기
- ✅ 조인에서는
eq_ref
,ref
를 유지 - ✅ 복잡한 서브쿼리는
JOIN
으로 변경 고려
📎 마무리
실행 계획은 단순한 쿼리 실행 설명이 아니라, 성능 최적화를 위한 핵심 정보입니다.EXPLAIN
과 EXPLAIN ANALYZE
를 통해 MySQL이 어떤 방식으로 데이터를 처리하는지 파악하고, 병목 지점을 찾아 개선해보세요.
728x90
반응형