본문 바로가기
프로그래밍/DataBase

Mariadb 쿼리 실행계획 참조표 (EXPLAIN)

by Mr-후 2020. 2. 12.
반응형

오늘은 마리아디비의 쿼리 실행계획이 궁금한 날이다. 

예전 기억에 MS-SQL의 경우 쿼리실행 계획을 하게 되면 문제가 되는 테이블과 예상 시간, 인덱스 등에 대해 좀더 자세히 볼 수 있었던 것 같은데 마리아디비에서는 잘 모르겠다. 

쿼리 실행계획을 수행하기 위해서는 

EXPLAIN 쿼리 

결과로 나온 내용은 무슨 말인지 전혀 모르겠다. 마리아디비 사이트에서 한글 번역을 해서 참조로 올려둔다. 

id 순서 테이블이 조인되는 순서를 나타내는 순서 번호입니다.
select_type 어떤 종류의 SELECT테이블이 나옵니다.
table 테이블의 별명 이름. 하위 쿼리의 구체화 된 임시 테이블 이름은 <subquery #>입니다.
type 테이블에서 행을 찾는 방법 (결합 유형)
possible_keys 테이블에서 행을 찾는 데 사용할 수있는 테이블의 키
key 행을 검색하는 데 사용되는 키의 이름입니다. NULL키가 사용되지 않았습니다.
key_len 사용 된 키의 바이트 수 (다중 열 키의 일부만 사용중인 경우 표시)
ref 키 값으로 사용되는 참조입니다.
rows 각 키 조회에 대해 표에서 찾을 행 수의 추정치입니다.
Extra 이 조인에 대한 추가 정보.

 

select_type에 대한 내용 

DEPENDENT SUBQUERY  SUBQUERY것입니다 DEPENDENT.
DEPENDENT UNION  UNION것입니다 DEPENDENT.
DERIVED  SELECT것입니다 DERIVED으로부터 PRIMARY.
MATERIALIZED  SUBQUERY것입니다 MATERIALIZED.
PRIMARY  SELECTA는 PRIMARY하나.
SIMPLE  SELECTA는 SIMPLE하나.
SUBQUERY  SELECTA는 SUBQUERY의 PRIMARY.
UNCACHEABLE SUBQUERY  SUBQUERY것입니다 UNCACHEABLE.
UNCACHEABLE UNION  UNION것입니다 UNCACHEABLE.
UNION  SELECTA는 UNION의 PRIMARY.
UNION RESULT 의 결과 UNION.



 

유형에 대한 내용 

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와 비슷하지만 주요 조회로 변환되는 하위 쿼리에 사용됩니다.

 

반응형