조인타입
먼저에 나올수록 성능이 좋음
system
- 테이블이 하나의 row만 가지고 있을때 표시됨
- const join타입의 특별한 케이스임
const
- 쿼리시작시 결과가 오직 하나일때 표시됨
- 결과가 하나의 row일 경우, 컬럼의 값은 옵티마이저에 의해 상수로 처리됨
- const 테이블은 오직 한번만 읽기에 매우 빠름
- 기본키 또는 UNIQUE 인덱스의 모든 부분을 상수값과 비교될때 표시됨
- 예제 쿼리
|
|
- eq_ref
- const와 system을 제외하고는 가장 최상의 join
- 이전 테이블에서 가져온 행 조합마다 해당 테이블에서 정확히 한 행을 읽음
- 인덱스의 모든 부분이 join에 사용되며, 인덱스가 기본키 또는 유니크키+not null조합이면서
=
를 사용하여 비교될때 사용됨 - 비교하는 값은 상수이거나, 이전에 읽은 테이블의 컬럼 사용
- 예제쿼리
|
|
- ref
- 이전 테이블에 가져온 행 조합마다일치하는 모든 인덱스를 읽음
- 키의 접두사만 읽거나, 키가 기본키나 유니크키가 아닐 경우 사용됨
- 정확히 하나의 row를 반환하지 않는 경유를 의미
- 키에 해당하는 행이 적은경우, 충분히 좋은 join 방법임
=
이거나<=>
일때 사용됨- 예제쿼리
|
|
fulltext
- FULLTEXT인덱스를 사용할때 사용됨
ref_or_null
- ref와 유사하지만, null을 포함하는 행의 질의를 할때 사용됨
- subquery를 처리할때 자주 표시됨
- 예제쿼리
|
|
index_merge
- 인덱스 병합 최적화일때 사용됨
- 이 경우 Explain의 key column에는 사용된 인덱스 목록이 포함되며, key_len에는 가장 긴 인덱스의 키 목록이 표함됨
- 링크참고
unique_subquery
- IN절 내의 eq_ref 서브쿼리의를 대체함
- 효율성을 높이기 위해 서브쿼리를 대체하여 인덱스만 조회함
- 예제쿼리
|
|
- index_subquery
- unique_subquery와 유사하지만, non-unique 서브쿼리일때 사용됨
- 예제쿼리
|
|
- range
- 인덱스로 범위질의를 사용시 사용됨
- =, <>, >, >=, <, <=, IS NULL, <=>, BETWEEN, LIKE, IN() 연산자를 사용하여 상수 값과 비교할때 나타남
- key_len에는 사용된 키 중 가장 긴키의 길이를 표시함
- 예제쿼리
|
|