DATABASE

[DB] MYSQL EXPLAIN(실행계획) 보는법

집한구석 2022. 4. 18. 22:01
728x90

EXPLAIN (실행계획)

  • DB가 데이터를 찾아가는 과정을 알아보기 쉽게 DB 결과 셋으로 보여주는 것
  • 사용방법 : EXPLAN [EXTENDED] SELECT ... FROM ... WHERE ...

EXPLAIN(실행계획) 정보 요약 

실행계획 정보 설명
id select문에 대한 순차 식별자, id 순서대로 select문이 실행됨
select_type select문의 유형
table 참조되는 테이블을 말함
type 어떤식으로 테이블들을 조인하는지 나타내는 항목, 타입을 분석함으로써 어떤 인덱스가 사용되고 있는지 확인하고, 이를 통해 쿼리를 어떻게 튜닝해야되는지에 대한 insight를 제공함
possible_keys 테이블에서 row를 매핑시키기 위해 사용 가능한 키를 보여줌
key 실제적으로 쿼리 실행에 사용된 key의 목록, possible_keys 목록에 나타나지 않은 인덱스도 포함이 가능함
ref key column에 지정된 인덱스와 비교되는 column 혹은 constants를 보여줌
rows 결과 산출에 있어서 접근되는 record의 숫자, 조인문이나 서브쿼리 최적화에 있어서 중요한 항목
extra 실행계획에 있어 부가정보를 보여줌

EXPLAIN(실행계획) 정보 타입 값 요약

select_type

  • SIMPLE : 단순 select문
  • PRIMARY : sub query 사용시 sub query  외부에 있는 쿼리와 union을 사용할 경우 union의 첫번째 쿼리
  • UNION : union 쿼리에서 primary를 제외한 나머지 select
  • DEPENDENT_UNION : union과 동일하나 외부쿼리에 의존적임
  • UNION_RESULT : union 쿼리의 결과물
  • SUBQUERY : sub query 혹은 sub query를 구성하는 첫번째 select문
  • DERIVED : select로 추출된 테이블 (from절에서 서브쿼리 또는 inline view)
  • UNCACHEABLE SUBQUERY : sub query와 동일하지만 공급되는 모든 값에 대하 subquery를 재처리함, 외부 쿼리에서 공급되는 값이 동이더라도 cahce된 결과를 사용할 수 없음
  • UNCACHEABLE UNION : union과 동일하지만 공급되는 모든 값에 대하여 union 쿼리를 재처리

type

  • system : 테이블에 단 한개의 데이터만 있는 경우
  • const : select에서 primary key 또는 unique key를 조회하는 경우로 많아야 한건 데이터만 있음
  • eq_ref : 조인을 할 때 primary_key
  • ref : 조인을 할 때 primary key 또는 unique key가 아닌 key로 매칭하는 경우
  • ref_or_null : ref와 같지만 null이 추가되어 검색되는 경우
  • index_merge : 두 개의 인덱스가 병합되어 검색이 이루어지는 경우
  • unique_subquery : in절 안의 서브쿼리에서 primary key가 오는 특수한 경우
  • index_subquery : uniquery_subquery와 비슷하나 primary key가 아닌 인덱스인 경우
  • range : 특정 범위 내에서 인덱스를 사용하여 원하는 데이터를 추출하는 경우 
  • index : 인덱슬르 처음부터 끝까지 찾아서 검색하는 경우 (인덱스 풀스캔)
  • all : 테이블을 처음부터 끝까지 검색하는 경우 (풀스캔)

extra

  • using index : 커버링 인덱스라고 하며 인덱스 자료 구조를 이용하여 데이터 추출
  • using where : where 조건으로 데이터 추출
  • using filesort : 데이터 정렬이 필요한 경우로 메모리 혹은 디스크상에서의 정렬을 모두 포함, 결과 데이터가 많은 경우 성능 이슈가 생김
  • using temporary : 쿼리 처리 시 내부적으로 temporary table이 사용되는 경우를 의미함

'DATABASE' 카테고리의 다른 글

[REDIS] CLI 명령어 정리  (0) 2022.07.03
[DB] 쿼리문 함수 정리  (0) 2021.12.15
[DB] CLUSTERING(클러스터링)  (0) 2021.11.13
[DB] REPLICATION(리플리케이션)  (0) 2021.11.13
[DB] 쿼리 처리 과정  (0) 2021.06.26