반응형
실행계획
- id
- 실행 순서 숫자, 같으면 조인
- select_type
- SIMPLE
- select구문으로만 작성
- PRIMARY
- 서브쿼리 포함된 혹은 UNION ALL에서 첫번째 SELECT 문
- SUBQUERY
- 독립적 서브쿼리, 스칼라 서브쿼리, WHERE절 중첩 서브쿼리
- DERIVED
- FROM절의 서브쿼리
- UNION
- 첫번째 SELECT 구문 이후의 SELECT 구문
- UNION RESULT
- union all이 아닌 union 구문
- DEPENDENT SUBQUERY
- UNION 형태로 구성된 서브쿼리 (메인테이블의 영향을 받는 경우 = 튜닝대상)
- DEPENDENT UNION
- UNION 형태로 구성된 서브쿼리에서 두번째 쿼리
- UNCACHEABLE SUBQUERY
- 메모리에 상주하여 재활용되어야 할 서브쿼리가 재사용되지 못할때
- 서브쿼리 안에 사용자 정의 함수나 사용자 변수 포함
- RAND(), UUID() 함수 사용
- MATERIALIZED
- IN절에서 연결된 서브쿼리가 조인이나 가공 작업을 수행할때
- SIMPLE
- table
- 테이블명 표시
- 서브쿼리나 임시 테이블 시 <subquery#> <derived#>로 표현
- partitions
- 대용량 데이터에서 사용
- type
- 데이터 찾는 방식
- system
- 데이터가 없거나 한개만 있는 경우, 성능상 최상의 type
- const
- 조회되는 데이터가 단 1건일 때, 성능상 매우 유리
- 고유 인덱스나 기본 키를 사용
- eq_ref
- 조인 수행 시 드리븐 테이블의 데이터에 접근하며 고유 인덱스 또는 기본 키로 단 1건의 데이터를 조회
- 조인이 수행될 때 성능상 가장 유리한 경우
- ref
- eq_ref와 유사한 방식, 조인을 수행할 때 드리븐 테이블의 데이터 접근범위가 2개 이상인 경우
- ref_or_null
- ref 유형과 유사하지만 IS NULL 구문에 대해 인덱스를 활용하도록 최적화된 방식
- 테이블에서 검색할 NULL 데이터양이 적다면 ref_or_null 방식을 활용했을때 효율적인 SQL 문이 되지만, 검색할 NULL 데이터양이 많다면 SQL 튜닝의 대상이 된다.
- range
- 테이블 내의 연속된 데이터 범위를 조회하는 유형으로 =,<>,>,≥,<,≤,IS NULL,BETWEEN, IN 연산을 통해 범위 스캔을 수행하는 방식
- 스캔할 범위가 넓으면 성능 저하의 요인이 될 수 있으므로 SQL 튜닝 검사의 대상이 된다.
- fulltext
- 텍스트 검색을 빠르게 처리하기 위해 전문 인덱스(full text index)를 사용하여 데이터에 접근
- index_merge
- 결합된 인덱스들이 동시에 사용
- 전문 인덱스(full text index)는 제외
- index
- 인덱스 풀 스캔
- 물리적인 인덱스 block을 처음부터 끝까지 훑는 방식으로, ALL과 유사
- 인덱스 테이블이 크기가 작으므로 테이블 풀 스캔 방식보다는 빠름
- ALL
- 테이블을 처음부터 끝까지 읽는 테이블 풀 스캔 방식
References
book : 업무에 바로 쓰는 SQL 튜닝
반응형
'Data Analysis > SQL Tuning' 카테고리의 다른 글
[SQL 레벨업] 2장. SQL 기초 (0) | 2023.12.19 |
---|---|
[SQL 레벨업] 1장. DBMS 아키텍쳐 (0) | 2023.12.13 |
[SQL 튜닝] 기본적인 튜닝 절차 (0) | 2023.11.13 |
[SQL 튜닝] 기본개념 (0) | 2023.11.13 |