MySQL EXPLAIN : Type 컬럼의 역할과 값 이해하기
👉 Type 컬럼의 역할
- 쿼리의 조인이나 조회 시 데이터 접근 방식의 효율성을 나타냄
- 특정 쿼리를 실행할 때 데이터베이스가 어떤 방식으로 데이터를 검색하는지를 알려줌
👉 Type 컬럼 값과 효율성 순서
- system
- 테이블에 단 하나의 행만 존재하거나 테이블이 비어있을 때 나타나는 값
- 테이블 전체가 하나의 인덱스와 동일한 경우
- 가장 효율적
- const
- 쿼리가 인덱스를 사용하여 단일 행을 검색할 때 나타나는 값
- 일반적으로 주 키나 고유 인덱스를 사용한 쿼리에 사용
- 매우 빠른 접근 방식
- eq_ref
- 조인에서 사용되며, 각 조인 행에 대해 단일 행만 검색될 때 나타나는 값
- 기본적으로 외래 키 또는 고유 인덱스에 대한 참조
- 효율적인 조인 방식
- ref
- 인덱스를 사용하여 여러 행을 검색할 때 나타나며, eq_ref와 유사하지만 여러 행이 일치할 수 있음
- 여러 행이 일치할 수 있지만 여전히 효율적
- fulltext
- 풀텍스트 인덱스를 사용하는 검색에 사용
- 텍스트 데이터의 전체적인 내용을 검색하는 데 사용되며, 일반적으로 텍스트 검색에 최적화되어 있음
- ref_or_null
- ref와 비슷하지만, NULL 값도 추가적으로 고려됨
- 나쁘지 않은 효율을 갖고 있음
- unique_subquery
- IN 절 내에 있는 고유한 서브쿼리에 사용
- 일반적으로 효율적이므로 나쁘지 않은 효율을 갖고 있음
- index_subquery
- IN 절 내에 있는 서브쿼리에 사용되며, unique_subquery와 유사하지만 더 많은 행이 일치할 수 있음
- 일반적으로 효율적이므로 나쁘지 않은 효율을 갖고 있음
- range
- 인덱스를 사용하여 범위 검색을 수행할 때 나타나는 값
- 예를 들어, 특정 값 사이 또는 특정 값보다 크거나 작은 값을 검색하는 경우
- 상대적으로 효율적이지만, 검색 범위에 따라 성능이 달라질 수 있음
- index_merge
- 이 값은 두 개 이상의 인덱스가 병합되어 검색에 사용될 때 나타나는 값
- 상대적으로 그다지 효율적이지 않지만 상황에 따라 효율성이 달라질 수 있음
- index
- 전체 인덱스 스캔이 사용될 때 나타나는 값
- ALL보다는 일반적으로 더 효율적이지만, 인덱스를 통해 모든 데이터가 검색됨
- ALL
- 전체 테이블 스캔을 의미하며, 가장 비효율적인 검색 방법
- 인덱스를 사용하지 않고 테이블의 모든 행을 검사
👉 결론
- Type 컬럼을 통해 쿼리의 효율을 확인하고 필요하다면 쿼리를 최적화할 수 있음
- 성능 저하의 원인을 찾을 수 있어서 성능 개선의 기회가 될 수 있음
- 때문에 EXPLAIN과 Type을 참고해 성능을 확인하는 습관을 갖는 것이 좋을 것 같음
글 잘 봤습니다.