티스토리 뷰
같은 쿼리더라도 어떻게 동작할지는 매우 다양하다.
이런 선택지 중에서 최적인 방법을 경적하는 것이 옵티마이저이다.
9.1 개요
실행 계획을 이해하면 비효율적인 부분을 찾아서 더 최적의 계획을 수립할 수 있다. 이해해보자
(1) 쿼리 실행 절차
크게 3가지이다.
1. 요청된 SQL문을 parsing해서 SQL parse tree생성
2. parse tree를 확인하면서 어떤 테이블부터 읽고 어떤 인덱스를 이용할지 결정. 다음 내용을 처리한다.
- 불필요한 조건 제거 및 복잡한 연산의 단순화
- 테이블 조인의 경우 어떤 테이블부터 읽을지 결정
- 각 테이블에 사용된 조건과 인덱스 통계 정보(?)를 이용해 사용할 인덱스 결정
- 가져온 레코드들을 임시 테이블에 저장하고 다시 한번 가공해야 하는지 결정
3. 결정된 읽기 순서나 인덱스를 이용해 스토리지 엔진으로부터 데이터를 가져온다.
- MySQL 엔진과 스토리지 엔진이 동시에 참여해서 수행
(2) 옵티마이저 종류
두뇌.
Cost-based Optimizer(CBO), Rule-based Optimizer(RBO) 2가지로 나뉨
RBO: 고정된 우선순위. 다양한 유스케이스에 적용이 거의 불가능해서 사용되지 않음.
CBO: 여러가지 가능한 실행 계획을 만들고 각 작업의 unit cost와 대상 테이블의 예측된 통계정보로 실행 계획별 코스트를 계산, 최소 코스트를 가진 실행 계획으로 쿼리를 수행한다.
'Real MySQL 8.0' 카테고리의 다른 글
[Real MySQL 8.0] 9. 옵티마이저와 힌트(1) 9.3 ~ (0) | 2023.02.08 |
---|---|
[Real MySQL 8.0] 9. 옵티마이저와 힌트(1) 9.2.3.3 ~ (1) | 2023.02.05 |
[Real MySQL 8.0] 8. 인덱스(6) 8.9~ (0) | 2023.02.01 |
[Real MySQL 8.0] 8. 인덱스 (5) 8.7~ (0) | 2023.02.01 |
[Real MySQL 8.0] 8. 인덱스 (2) 8.3.4~ (1) | 2023.01.27 |