[database] 실행 계획
Updated:
개요
- 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
- 부가 정보를 나타내는 컬럼
- id
- 쿼리 앞에 EXPLAIN 키워드를 붙여서 실행