카테고리 없음

MySQL 실행계획(EXPLAIN) COST 보는 법

yoozung 2023. 2. 26. 20:55

 

 

쿼리 성능 개선시 꼭 봐야 할 실행계획 보는 방법에 대해 알아보겠습니다

 

 

 

 

MySQL 실행계획 띄우는 법

EXPLAIN
 SELECT *
   FROM EMP
;

이렇게 실행계획을 볼 쿼리 앞에 EXPLAIN을 날리면

 

 

 

 

이런식으로 결과가 뜹니다

이 실행계획을 어떻게 보는지 컬럼 하나씩 알아보도록 하겠습니다

 

 

 

▶  id

SELECT 쿼리 내에서의 일련번호입니다

한 SELECT 쿼리 내에 여러 개의 SELECT문이 서브쿼리 형태로 들어가면 ID 값이 auto increment됩니다.

 

 

▶  select_type

SIMPLE

단순 SELECT문 사용시 나오는 유형

(UNION이나 서브쿼리 X)

 

PRIMARY

가장 외곽에 있는 SELECT 

 

UNION

두번째나 나중에 사용된 UNION 쿼리

 

DEPENDENT UNION

두번째나 나중에 사용된 UNION 쿼리, 바깥쪽 쿼리에 의존한 UNION

 

UNION RESULT

UNION의 결과물

 

SUBQUERY

서브쿼리에서 첫번째 SELECT 

 

DEPENDENT SUBQUERY

서브쿼리의 첫번째 select, 바깥 쪽 쿼리에 의존

 

DERIVED

파생된 테이블

 

UNCACHEABLE SUBQUERY

결과를 캐시할 수 없고 외부 쿼리의 각 행에 대해 재평가해야 하는 하위 쿼리

 

MATERIALIZED

구체화된 서브쿼리

 

 

 

▶  table

출력 행이 참조하는 테이블의 이름입니다.

 

 

▶  type 

조인 또는 조회 타입입니다

system 테이블에 단 한개의 데이터만 있는 경우
const select 에서 조건을 만족하는 row가 하나일 때
(const 테이블은 한 번만 읽기 때문에 매우 빠름)
eq_ref 조인에서 인덱스의 모든 부분을 사용하고 인덱스가 pk 또는 unique not null 인덱스일 때 사용 됨
ref 키가 PRIMARY KEY또는 UNIQUE인덱스가 아닌 경우(즉, 조인이 키 값을 기반으로 단일 행을 선택할 수 없는 경우)에 사용됩니다. 
ref_or_null 이 조인 유형은 ref와 비슷하지만 MySQL이 NULL값을 포함하는 행에 대해 추가 검색을 수행
index_merge 인덱스 병합 최적화가 사용됨을 나타냅니다. 
key출력 행의 열에는 사용된 인덱스 목록, key_len에는 사용된 인덱스의 가장 긴 키 부분 목록이 포함
range 특정 범위 내에서 인덱스를 사용하여 원하는 데이터를 추출하는 경우
index 인덱스 풀스캔. 인덱스를 처음부터 끝까지 찾아서 검색
all 테이블 풀스캔. 테이블을 전부 검색하는 경우

 

▶  possible_keys

테이블에서 행을 찾기 위해 선택할 수 있는 인덱스를 나타냅니다.

이 컬럼에 뜨는 키는 실제 쿼리를 실행될 때 사용되는 키가 아닌 사용 가능한 후보키들입니다

NULL이라고 뜨면 사용 가능한 인덱스가 없는겁니다

 

 

▶  key

실제 쿼리가 실행될 때 사용되는 인덱스입니다.

 

 

▶  key_len

쿼리가 실행될 떄 인덱스의 각 레코드에서 몇 바이트까지 사용됐는지 알려주는 컬럼입니다.

 

 

▶  ref

쿼리가 실행될 때 키와 함께 사용된 컬럼이나 상수값을 나타냅니다

 

▶  rows

결과값을 찾기 위해 몇 개의 행을 읽어야 하는지 예측값을 의미합니다

 

 

▶  extra

추가정보

종류 설명
using index 인덱스를 이용해서 데이터 추출
using where where 조건으로 데이터 추출
using temporary 쿼리 실행시 내부적으로 가상 테이블이 생성되는 것
using filesort 정렬
using index condition where절의 인덱스를 이용한 조건에 체크 조건이 있을 경우 체크 조건 처리를 스토리지 엔진이 하도록 전달