MySQL EXPLAIN : Type 컬럼의 역할과 값 이해하기

LeeYulhee·2023년 11월 13일
0

👉 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을 참고해 성능을 확인하는 습관을 갖는 것이 좋을 것 같음
profile
끝없이 성장하고자 하는 백엔드 개발자입니다.

1개의 댓글

comment-user-thumbnail
2023년 11월 13일

글 잘 봤습니다.

답글 달기

관련 채용 정보