Database

MariaDB Explain

junseokoh 2022. 8. 22. 20:56
SELECT, UPDATE 또는 DELETE 문 앞에 EXPLAIN 키워드가 있으면
MariaDB는 쿼리 실행 계획에 대한 최적화 프로그램의 정보를 표시합니다.
 
즉, MariaDB는 테이블이 조인되는 방법과 순서에 대한 정보를 포함하여
SELECT, UPDATE 또는 DELETE를 처리하는 방법을 설명합니다.
 
EXPLAIN EXTENDED를 사용하여 추가 정보를 제공할 수 있습니다.

Explain Columns

id 테이블이 조인되는 순서를 표시하는 Sequence 번호
select_type 어떤 종류의 SELECT 테이블에서 왔는지
table 테이블의 별칭 이름. 하위 쿼리의 경우 <subquery#>
type 테이블에서 행을 찾는 방법(join 유형)
possible_keys 테이블에서 행을 찾는데 사용할 수 있는 테이블의 키
key 행을 검색하는데 사용한 키의 이름. null은 사용된 키 없음
key_len 사용된 키의 바이트 수. (다중 열(multi-column) 키의 일부만 사용 중인지 표시)
ref 키 값으로 사용되는 참조
rows 각 키 조회에 대해 테이블에서 찾을 수 있는 행의 추정치
Extra 이 조인에 대한 추가 정보.

select_type

여기는 한국말로 풀어쓰면 더 이해가지 않을 것 같아서 본문 그대로 옮김

DEPENDENT SUBQUERY The SUBQUERY is DEPENDENT.
DEPENDENT UNION The UNION is DEPENDENT.
DERIVED The SELECT is DERIVED from the PRIMARY.
MATERIALIZED The SUBQUERY is MATERIALIZED.
PRIMARY The SELECT is a PRIMARY one.
SIMPLE The SELECT is a SIMPLE one.
SUBQUERY The SELECT is a SUBQUERY of the PRIMARY.
UNCACHEABLE SUBQUERY The SUBQUERY is UNCACHEABLE.
UNCACHEABLE UNION The UNION is UNCACHEABLE.
UNION The SELECT is a UNION of the PRIMARY.
UNION RESULT The result of the UNION.
LATERAL DERIVED The SELECT uses a Lateral Derived optimization

type

ALL 테이블에 대해 전체 테이블 스캔이 수행됩니다(모든 행을 읽음). 테이블이 크고 테이블이 이전 테이블에 대해 조인되면 이는 좋지 않습니다! 이것은 옵티마이저가 행에 액세스하는 데 사용할 수 있는 인덱스를 찾을 수 없을 때 발생합니다.
const
테이블에 일치하는 행이 하나만 있습니다. 최적화 단계 전에 행을 읽고 테이블의 모든 열은 상수로 처리됩니다.
eq_ref
고유 인덱스는 행을 찾는 데 사용됩니다. 이것은 행을 찾는 가장 좋은 계획입니다.
fulltext
전체 텍스트 인덱스는 행에 액세스하는 데 사용됩니다.
index_merge
여러 인덱스에 대해 '범위' 액세스가 수행되고 발견된 행이 병합됩니다. 키 열에는 사용된 키가 표시됩니다.
index_subquery
이는 ref와 유사하지만 키 조회로 변환되는 하위 쿼리에 사용됩니다.
index
사용된 인덱스에 대한 전체 스캔. ALL보다 낫지만 인덱스가 크고 테이블이 이전 테이블에 대해 조인되면 여전히 나쁩니다.
range
테이블은 하나 이상의 값 범위에 대한 키로 액세스됩니다.
ref_or_null
'ref'와 비슷하지만 첫 번째 값이 발견되지 않으면 'null' 값에 대한 또 다른 검색이 수행됩니다. 이것은 일반적으로 하위 쿼리에서 발생합니다.
ref
고유하지 않은 인덱스 또는 고유 인덱스의 접두사는 행을 찾는 데 사용됩니다. 접두사가 많은 행과 일치하지 않는 경우에 좋습니다.
system
테이블에 0 또는 1개의 행이 있습니다.
unique_subquery
이것은 eq_ref와 유사하지만 키 조회로 변환되는 하위 쿼리에 사용됩니다.
EXPLAIN SELECT ...

EXPLAIN FORMAT=JSON SELECT ...

ANALYZE SELECT ...

ANALYZE FORMAT=JSON SELECT ...