우당탕탕

MySQL EXPLAIN 실행 계획에서 확인할 주요 항목 본문

Database

MySQL EXPLAIN 실행 계획에서 확인할 주요 항목

모찌모찝 2026. 10. 17. 10:01

MySQL 8.4 버전 기준, EXPLAIN 명령은 SELECT, DELETE, INSERT, REPLACE, UPDATE 문에 대해 실행 계획 정보를 제공합니다. 각 테이블별로 한 행씩 결과를 반환하며, MySQL이 쿼리를 처리하는 순서대로 테이블을 나열합니다.

EXPLAIN 출력에서 확인할 주요 컬럼

  • id (select_id): 쿼리 내 SELECT 문 식별자 번호입니다.
  • select_type: SELECT 문의 유형으로 SIMPLE, PRIMARY, UNION, SUBQUERY 등 다양한 값이 있습니다.
  • table (table_name): 해당 행이 참조하는 테이블 이름 또는 파생 테이블, 서브쿼리 결과 등을 나타냅니다.
  • partitions: 쿼리가 접근하는 파티션 정보이며, 비파티션 테이블은 NULL입니다.
  • type (access_type): 조인 타입으로, 시스템 테이블부터 전체 테이블 스캔(ALL)까지 성능 순서대로 표시됩니다.
  • possible_keys: MySQL이 사용할 수 있는 가능한 인덱스 목록입니다. NULL이면 인덱스가 없음을 의미합니다.
  • key: 실제로 사용된 인덱스 이름입니다. NULL이면 인덱스를 사용하지 않았음을 뜻합니다.
  • key_len: 사용된 인덱스 키 길이로, 다중 컬럼 인덱스에서 몇 개 컬럼을 사용했는지 알 수 있습니다.
  • ref: 인덱스와 비교되는 컬럼 또는 상수입니다.
  • rows: MySQL이 예상하는 검사할 행 수입니다. InnoDB는 추정치입니다.
  • filtered: 테이블 조건에 의해 필터링된 행의 비율(%)입니다. 100이면 필터링 없음.
  • Extra: 쿼리 처리에 대한 추가 정보가 표시됩니다. JSON 포맷에서는 별도 속성으로 제공됩니다.

조인 타입(type/access_type) 설명

조인 타입은 MySQL이 테이블을 어떻게 접근하는지 나타내며, 성능이 좋은 순서대로 주요 타입은 다음과 같습니다.

  • system: 테이블에 행이 하나뿐인 경우 (const의 특수 경우)
  • const: PRIMARY KEY 또는 UNIQUE 인덱스가 상수 값과 비교되어 최대 한 행을 읽음
  • eq_ref: 이전 테이블의 각 행 조합마다 인덱스의 한 행을 읽음 (최고 성능 조인)
  • ref: 인덱스의 일부 접두어를 사용하거나 UNIQUE가 아닌 인덱스를 사용하여 여러 행을 읽음
  • ref_or_null: ref와 유사하나 NULL 값도 추가로 검색
  • index_merge: 여러 인덱스를 병합하여 사용
  • range: 인덱스를 이용해 범위 내 행만 검색
  • index: 인덱스 전체를 스캔 (인덱스만으로 쿼리 만족 시)
  • ALL: 전체 테이블 스캔 (성능 최악)

Extra 컬럼 주요 정보

Extra 컬럼은 쿼리 실행에 대한 부가 정보를 제공합니다. 예를 들어, "Using index"는 인덱스만으로 데이터를 처리함을 의미하며, "Using where"는 WHERE 조건이 적용됨을 나타냅니다.

이상으로 MySQL EXPLAIN 실행 계획에서 반드시 확인해야 할 주요 항목과 그 의미를 정리했습니다.

참고 자료

Comments