MariaDB 실행 계획 EXPLAIN 보는 방법

cheongyeong·2023년 10월 5일
0
post-thumbnail

id

쿼리 처리 순서를 나타낸다.

select_type

select에 대한 타입을 나타낸다.

  • SIMPLE
    UNION이거나 서브쿼리가 없는 단순 SELECT를 의미

  • PRIMARY
    서브쿼리가 있을 때 가장 바깥쪽에 있는 SELECT

  • DERIVED
    FROM절 안의 서브쿼리

  • DEPENDENT SUBQUERY
    외부 쿼리와 상호 연관된 서브쿼리

table

참조하는 테이블을 나타낸다.

type

join 혹은 조회 타입을 나타낸다.

!!!! 아래로 갈수록 성능이 좋지 않다. !!!!

  • ystem
    테이블에 단 한 개의 데이터만 있는 경우

  • const
    SELECT에서 Primary Key 혹은 Unique Key를 상수로 조회하는 경우로, 많아야 한 건의 데이터만 있음

  • eq_ref
    조인을 할 때 Primary Key 혹은 Unique Key로 매칭하는 경우

  • ref
    조인을 할 때 Primary Key 혹은 Unique Key가 아닌 Key(index)로 매칭하는 경우

  • ref_or_null
    reg와 같지만 NULL이 추가되어 검색되는 경우

  • index_merge
    두 개의 인덱스가 병합되어 검색이 이루어지는 경우

  • unique_subquery
    IN절 안의 서브쿼리에서 Primary Key가 오는 특수한 경우

  • index_subquery
    unique_subquery와 비슷하나 Primary Key가 아닌 일반 인덱스인 경우

  • range
    특정 범위 내에서 인덱스를 사용하여 원하는 데이터를 추출하는 경우
    (데이터가 방대하지 않다면 단순 SELECT에서는 괜찮음)

  • index
    인덱스를 처음부터 끝까지 찾아서 검색하는 경우. 인덱스 풀스캔

  • all
    테이블을 처음부터 끝까지 검색하는 경우. 테이블 풀스캔

possible_keys

데이터를 조회할 때 DB에서 사용할 수 있는 인덱스 리스트이다.

key

실제로 사용할 인덱스명을 나타낸다.

key_len

실제로 사용할 인덱스의 길이를 나타낸다.

ref

key 컬럼에 나와있는 인덱스에서 값을 찾기 위해 선행 테이블의 어떤 컬럼이 비교되었는지를 나타낸다.

rows

이 값은 쿼리 수행에서 MySQL이 예측했던 레코드 건수를 보여준다. 추정 수치이며 항상 정확하지 않다.

extra

쿼리의 실행 계획에서 성능에 관련된 내용이 extra에 표시된다.

  • distinct
    조건을 만족하는 레코드를 찾았을 때 같은 조건을 만족하는 또 다른 레코드가 있는지 검사하지 않음.
  • not exist
    left join 조건을 만족하는 하나의 레코드를 찾았을 때 다른 레코드의 조합은 더 이상 검사하지 않는다.
  • range checked for each record
    최적의 인덱스가 없는 차선의 인덱스를 사용한다는 의미.
  • using filesort
    mysql이 정렬을 빠르게 하기 위해 부가적인 일을 한다.
  • using index
    select 할때 인덱스 파일만 사용
  • using temporary
    임시 테이블을 사용한다. order by 나 group by 할때 주로 사용
  • using where
    조건을 사용한다는 의미.
profile
👩‍💻💡

0개의 댓글