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 ...