DBMS/MySQL & MariaDB

Mysql EXPLAIN

이제이b 2024. 6. 26. 08:05

SELECT TYPE 

SELECT TYPE 명  설명
SIMPLE 일반적인 SELECT 문. 복잡한 UINON 이나 서브쿼리가 없는 경우 
단순 테이블에서 데이터를 가져와 결과 반환 하므로 가장 빠름
PRIMARY 복잡한 쿼리에서의 최상의 쿼리문의 경우
SUBQUERY SELECT 문 안에서 서브쿼리를 사용한 경우 
DEPENDENT SUBQUERY 서브쿼리가 외부 쿼리로부터 값을 참조하여 실행한 경우
DERIVED FROM절에서 쓰인 서브쿼리 (인라인 뷰)
UNION  UNION 또는 UNION ALL 사용한 경우
DEPENDENT UNION UNION의 서브쿼리가 외부 쿼리로부터의 값을 참고하여 실행하는 경우
UNION RESULT  UNION 결과로 생성된 임시 테이블에 대한 SELECT 문을 실행하는 경우 

 

JOIN TYPE

TYPE 명  설명
system 테이블에 한 개의 row 만 있는 경우 
const Unique key 혹은 Primary Key를 상수로 조회하는 경우 (한 건만 존재)
eq_ref 다른 테이블과 조인 시 Primary Key를 이용 (한 건 조회)
ref 인덱스에 설정된 모든 컬럼을 조회 조건을 사용
사용되는 키 조건이 몇 개의 행에 일치하는 경우. 최소 2개 이상
fulltext 풀 텍스트 인덱스를 사용하여 수행
ref_or_null ref 와 동일하지만 null 값이 포함된 경우 
MySQL 의 경우 NULL 에 대해서도 인덱스를 활용할 수 있고 이때 가장 앞에 정렬 됨
index_merge 단일 테이블의 여러 범위의 행을 스캔한 결과를 하나로 병합
unique_subquery IN 절의 서브쿼리에 eq_req 적용 
index_subquery IN 적읠 서브쿼리에 PK 가 아닌 인덱스 적용 
range 인덱스의 지정 범위 안의 행을 검색
(BETWEEN, LIKE, IN, <, >, <=. >=.. )
index 단일 인덱스의 일부만 충족할 경우 
테이블 풀 스캔보다는 유리하지만 물리적인 인덱스 블록을 처음부터 끝까지 탐색
all 테이블 풀스캔 
전체 테이블 중 10~20퍼센트를 조호할 때는 오히려 유리할 때도 있음 

 

EXTRA TYPE 

extra는 SQL문을 어떻게 수행할 것인지 나타냄. 

보통 Using temporary, Using filesort 정도가 튜닝 대상. 

Extra 명  설명
Using index 인덱스를 사용하여 쿼리를 처리하는 것.
물리적으로 인덱스의 사이즈가 작고 정렬이 되어 있다면 성능상으로 효율적이라고 판단. 
Using index for group-by Group By 나 Distinct 구문으로 그룹화 작업이 수행될 때 인덱스를 사용하는 것.
그룹화 작업을 최적화하거나 인덱스를 활용하여 성능을 개선할 수 있는지 확인
Using where 
Using index condition 
WHERE 절 처리 방식을 나타냄.
필요한 경우 WHERE 절 조건 항목들을 최적화하거나, 불피요한 조건을 줄이는 등 작업 고려 
Using sort_union() 병합 작업에서 정렬을 수행하는 것.
성능상 문제가 될 여지가 있다면 정렬을 최적화 필요
Using join buffer
(Block Nested Loop, Batched Key Access)
조인 수행 중 중간 데이터 결과를 저장하는 조인 버퍼를 사용.
성능 개선을 위해 조인 버퍼 크기를 조정하거나 인덱스를 사용하여 조인 작업 최적화 
Using temporary  데이터 중간 결과를 저장하기위해 임시 테이블을 사용.
임시 테이블은 메모리나 디스크에 생성되어 쿼리 결과를 저장하는 용도로 사용.
보통 Distinct, Group By, Order By 구문 등이 포함된 경우 출력 
Using filesort  정렬 작업을 위해 파일 정렬를 수행.
이미 정렬된 인덱스를 사용하면 추가 정렬 작업이 필요 없지만, 인덱스를 사용하지 못할 경우 정렬을 위해 메모리에 올리므로 성능에 부담을 줄 수 있음.
정렬이 필요한 경우 인덱스 검토 (이미 정렬된 인덱스를 생성)하거나 애플리케이션에서 정렬을 하는 방식등 고려