Updated:

1 minute read

개요

  • SQL을 실행하여 데이터를 추출하려고 할 때 옵티마이저(optimizer)가 수립하는 작업 절차


확인 방법

  • MySQL
    • 쿼리 앞에 EXPLAIN 키워드를 붙여서 실행
    • 결과 정보
      • id
        • 실행 계획(SELECT 문)이 여러 개인 경우 구분하기 위한 컬럼
        • JOIN은 하나의 SELECT 문으로 판단하여 같은 id가 부여
        • UNION, Sub Query는 다른 SELECT 문으로 판단하여 다른 id 부여
      • select_type
        • SELECT 타입을 나타내는 컬럼
        • SIMPLE
          • UNION, Sub Query를 사용하지 않는 SELECT
        • PRIMARY
          • UNION, Sub Query를 사용하는 SELECT에서 첫번째 SELECT
        • UNION
          • UNION을 사용하는 SELECT에서 PRIMARY 이회의 SELECT
        • DEPENDENT UNION
          • UNION을 사용하는 SELECT에서 외부 쿼리에 영향을 받는 SELECT
        • UNION RESULT
          • UNION의 결과를 담는 임시 테이블
        • SUBQUERY
          • FROM절 이외에 사용된 Sub Query
        • DEPENDENT SUBQUERY
          • Sub Query를 사용하는 SELECT에서 외부 쿼리에 영향을 받는 SELECT
        • DERIVED
          • FROM절에 사용된 Sub Query
        • DEPENDENT DERIVED
          • LATERAL JOIN을 사용한 경우
        • UNCACHEABLE UNION
          • UNION 결과를 캐시할 수 없는 경우
        • UNCACHEABLE SUBQUERY
          • Sub Query 결과를 캐시할 수 없는 경우
        • MATERIALIZED
          • Sub Query를 최적화한 경우
      • table
        • 테이블 정보를 나타내는 컬럼
      • partitions
        • 파티션 정보를 나타내는 컬럼
      • type
        • 실행 계획 타입을 나타내는 컬럼
        • system
          • 레코드가 한개 이하인 테이블을 조회할 경우 세우는 실행 계획
        • const
          • WHERE 문을 통해 하나의 레코드를 조회할 경우 세우는 실행 계획
        • eq_ref
          • JOIN 문과 기본키, 유니크 인덱스가 WHERE 문에 포함되고 하나의 레코드를 조회할 경우 세우는 실행 계획
        • ref
          • JOIN 문과 기본키, 유니크 인덱스외의 인덱스가 WHERE 문에 포함되고 여러개의 레코드를 조회할 경우 세우는 실행 계획
        • ref_or_null
          • ref에 NULL 비교가 추가된 경우 세우는 실행 계획
        • fulltext
          • fulltext 인덱스를 조회할 경우 세우는 실행 계획
        • unique_subquery
          • Sub Query에서 중복 없이 반환되는 경우 세우는 실행 계획
        • index_subquery
          • Sub Query에서 중복 있게 반환되는 경우 세우는 실행 계획
        • index_merge
          • n개의 테이블 조회 시 테이블마다 인덱스들을 조합하는 실행 계획
        • range
          • 범위(<, >, BETWEEN, IN, LIKE 등) 조회 시 세우는 실행 계획
        • index
          • index full scan을 해야하는 경우 세우는 실행 계획
        • all
          • table full scan을 해야하는 경우 세우는 실행 계획
      • possible_keys
        • 옵티마이저가 고려한 인덱스 목록을 나타내는 컬럼
      • key
        • 옵티마이저가 possible_keys 중에 실제 사용한 인덱스를 나타내는 컬럼
      • key_len
        • 인덱스내에서 몇바이트를 사용했는지를 나타내는 컬럼
        • 다중 컬럼 인덱스일 경우 유용
      • ref
        • 참조한 컬럼을 나타내는 컬럼
      • rows
        • 결과를 도출하기 위해 조회한 데이터 수
      • filtered
        • 전체 레코드 대비 조건으로 걸러진 레코드의 비율을 나타내는 컬럼
      • Extra
        • 부가 정보를 나타내는 컬럼