DB

[MySQL] EXPLAIN이란? 실행계획을 확인하는 이유와 기본 구조 정리 🔍

인생아 2025. 7. 4. 00:30
반응형

MySQL에서 쿼리 성능을 최적화하려면 EXPLAIN 명령어를 반드시 이해하고 활용해야 한다. 데이터가 많아질수록 단순한 SELECT 문 하나가 엄청난 성능 차이를 만들 수 있기 때문이다. 실행계획(EXECUTION PLAN)은 데이터베이스가 쿼리를 어떻게 처리할지에 대한 내부 전략을 보여준다.

특히 인덱스 활용 여부, 테이블 스캔 발생 유무, 조인의 순서 등을 확인할 수 있어 실무 튜닝에서 매우 중요하게 사용된다.

✅ EXPLAIN이란 무엇인가?

EXPLAIN 또는 EXPLAIN SELECT 문은 주어진 SQL 쿼리에 대해 MySQL이 어떤 방식으로 데이터를 가져올지에 대한 실행 전략을 출력한다.

EXPLAIN SELECT * FROM users WHERE email = 'test@example.com';

위 명령어를 실행하면 MySQL은 해당 쿼리를 처리하기 위해 어떤 인덱스를 사용할지, 몇 건을 스캔할지 등을 테이블 형태로 출력한다.

반응형

🧩 왜 실행계획이 중요한가?

다음과 같은 이유로 실행계획은 실무에서 매우 중요하다.

  • 인덱스를 제대로 타는지 확인 가능
  • 불필요한 Full Table Scan 여부 확인
  • JOIN 순서와 방식 확인
  • 서브쿼리/뷰 성능 이슈 분석 가능

즉, 쿼리 성능 문제를 발견하고 해결하는 거의 유일한 단서가 실행계획이다.

🧾 EXPLAIN 기본 출력 컬럼 해설

EXPLAIN 명령어를 실행하면 아래와 같은 주요 컬럼이 출력된다.

컬럼 이름 설명
id 쿼리의 순서를 나타내며, JOIN이나 서브쿼리에서 중요한 역할을 한다
select_type 단순 SELECT인지, 서브쿼리인지, UNION인지 등을 알려준다
table 액세스되는 테이블 이름
type 조인의 타입으로, 성능에 큰 영향을 주는 컬럼이다
possible_keys 사용할 수 있는 인덱스 목록
key 실제 사용된 인덱스
rows MySQL이 처리할 것으로 예측한 행 수
Extra 추가적인 정보, 예: Using where, Using filesort 등
 

🔍 주요 컬럼 미리보기 예시

EXPLAIN SELECT * FROM orders WHERE user_id = 1;
id select_type table type possible_keys key rows Extra
1 SIMPLE orders ref user_id_idx user_id_idx 1 Using where

이처럼 key에 인덱스가 명확하게 지정되어 있고, type이 ref이므로 비교적 효율적인 쿼리임을 알 수 있다.

반응형

📌 EXPLAIN을 활용한 문제 해결 포인트

  • type이 ALL이면 위험: Full Table Scan 발생 가능
  • key가 NULL이면 인덱스 미사용
  • rows 수치가 지나치게 크면 느린 쿼리 의심
  • Extra에 Using temporary, Using filesort 있으면 튜닝 대상

이러한 항목은 모두 SQL 최적화의 신호등이라 할 수 있다. 쿼리 하나하나의 실행계획을 점검하는 습관을 들이면 전체 시스템 성능도 향상된다.

🧠 EXPLAIN 사용 시 참고 팁

  • EXPLAIN ANALYZE를 사용하면 실제 실행 시간까지 확인할 수 있다 (MySQL 8.0 이상)
  • SHOW WARNINGS 명령어로 더 상세한 설명 확인 가능
  • 뷰나 서브쿼리를 사용할 경우, 복잡한 쿼리 구조에서는 FORMAT=JSON 형태로 실행계획 분석도 가능

📚 참고 문서

반응형