MySQL EXPLAIN 실행 계획 — 쿼리 성능 분석과 실행 순서 시각화를 위한 핵심 도구입니다. 이 글에서는 각 컬럼의 의미, 인덱스 사용 여부, 실제 사례 중심의 EXPLAIN 분석 방법을 MySQL 인덱스 최적화·슬로우 쿼리 로그 분석과 연계해 2025년 최신 기준으로 설명합니다.
⚙️ 1. MySQL EXPLAIN 실행 계획이란?
MySQL EXPLAIN 실행 계획은 **데이터베이스 옵티마이저(Optimizer)**가
쿼리를 어떻게 실행할지 미리 보여주는 기능입니다.
즉, MySQL이 쿼리를 어떤 순서와 방식으로 처리하는지 예측할 수 있는 성능 분석 도구입니다.
EXPLAIN SELECT * FROM orders WHERE user_id = 123 AND order_date > '2025-01-01';
💡 위 명령어는 실행하지 않고 **실행 계획(plan)**만 보여줍니다.
이는 MySQL 인덱스 최적화 및 슬로우 쿼리 로그 분석의 기초가 됩니다.

📊 2. MySQL EXPLAIN 실행 계획 컬럼별 해석
| 컬럼 | 설명 | 의미 |
|---|---|---|
| id | 쿼리 순서 | 여러 SELECT 중 실행 순서 |
| select_type | 쿼리 유형 | SIMPLE, PRIMARY, SUBQUERY 등 |
| table | 접근 중인 테이블명 | 조인 시 여러 개 등장 |
| type | 접근 방식 | ALL, index, range, ref, eq_ref, const, system |
| possible_keys | 사용 가능한 인덱스 | 옵티마이저가 고려한 후보 |
| key | 실제 사용된 인덱스 | 실질적으로 사용된 인덱스 |
| rows | 스캔된 행 수 | 적을수록 효율적 |
| filtered | 필터링 비율(%) | WHERE 조건으로 남은 비율 |
| Extra | 추가 정보 | Using index, Using temporary 등 |
🔍 3. MySQL EXPLAIN 실행 계획 type 컬럼으로 성능 판단
| type | 의미 | 성능 평가 |
|---|---|---|
| ALL | 전체 스캔 | ❌ 매우 느림 |
| index | 인덱스 전체 스캔 | ⚠️ 중간 |
| range | 범위 검색 | ✅ 효율적 |
| ref | 조인 시 특정 컬럼 참조 | ✅ 좋음 |
| eq_ref | 유일 인덱스 조인 | 💯 최고 |
| const / system | 단일 행 접근 | 💯 매우 빠름 |
💡 핵심 팁:
EXPLAIN에서 type = ALL이 보이면 반드시 인덱스 설계를 점검해야 합니다.
🧠 4. Extra 컬럼 완벽 해석
| Extra | 의미 | 조치 |
|---|---|---|
| Using index | 커버링 인덱스 사용 | ✅ 매우 좋음 |
| Using temporary | 임시 테이블 생성 | ⚠️ GROUP BY 개선 필요 |
| Using filesort | 정렬 수행 | ⚠️ ORDER BY 인덱스 추가 고려 |
| Using where | WHERE 조건 필터링 | 정상적 동작 |
| Null | 최적화된 단일 접근 | 💯 효율적 |
💡 "Using temporary"와 "Using filesort"가 동시에 등장하면,
ORDER BY + GROUP BY 구조를 재검토해야 합니다.
⚡ 5. EXPLAIN ANALYZE (MySQL 8.0 이상)
MySQL 8.0부터는 EXPLAIN ANALYZE 명령어로 실제 실행 시간을 측정할 수 있습니다.
EXPLAIN ANALYZE SELECT * FROM orders WHERE user_id = 123 AND order_date > '2025-01-01';
출력에는 단계별 **실제 시간(ms)**과 쿼리 플랜 구조가 표시됩니다.
이를 통해 MySQL 인덱스 최적화 효과를 실시간으로 검증할 수 있습니다.
☁️ 6. Aurora / MariaDB 환경에서의 MySQL EXPLAIN 실행 계획 차이
| 항목 | Aurora MySQL | MariaDB |
|---|---|---|
| EXPLAIN FORMAT | JSON, TREE 지원 | TEXT, JSON 지원 |
| 병렬 쿼리 | ✅ Parallel Query 지원 | ❌ 미지원 |
| ANALYZE FORMAT | CloudWatch 출력 가능 | 로그 기반 분석 필요 |
💡 Aurora에서는 EXPLAIN 결과를 CloudWatch Logs로 내보낼 수 있어
시각적 분석 및 자동화에 유리합니다.
🔗 7. 참고 자료
💬 8. 마무리 및 다음 글 안내
EXPLAIN은 단순한 분석 도구가 아니라,
MySQL 성능 튜닝의 시작점이자 시각적 가이드입니다.
👉 다음 글에서는
“옵티마이저 힌트(Optimizer Hints)와 실행 계획 튜닝 실무 가이드”
를 다룰 예정입니다.
