1. Optimizer란?
사용자가 질의한 SQL문에 대해 최적의 실행 방법(가장 효율적인 방법)으로 최적의 처리 경로를 결정하는 역할로
DBMS의 핵심 엔진

- SQL을 작성하고 실행하면 즉시 실행되지 않고 Optimizer에서 쿼리문에 대한 실행계획 생성
- 실행계획은 Optimizer가 생성한 SQL 처리 경로
- 여러가지 실행계획 생성 후 시스템 통계 정보를 활용하여 각 실행계획의 비용 산정
- 각 실행계획을 비교해서 최고의 효율을 가진 실행계획 실행
- 최적화의 목표는 전체 처리 속도/최초 응답 속도 최적화
RBO(Rule-Based Optimizer)
- 규칙(우선순위)를 가지고 실행계획 생성(실행속도가 빠른순으로 규칙을 세워둠)
- Optimizer힌트와 Hash Join 사용 불가
CBO(Cost-Based Optimizer)
- 비용이 가장 적게 드는 실행계획을 선택
- Cost = 쿼리 수행시들어가는 일량, 시간의 예상치
| RBO | CBO | |
| 개념 | 사전에 정의된 규칙 기반 | 최소비용 계산 실행계획 수립 |
| 기준 | RULE | COST |
| 인덱스 | 인덱스 존재시 가장 우선 사용 | Cost에 의한 결정 |
| 성능 | 사용자 SQL 작성 숙련도 | 옵티마이저 예측 성능 |
| 장잠 | 판단이 매우 규칙적으로 실행 예상 가능 | 통계 정보를 통한 현실 요소 적용 |
2. Optimizer 동작 방식

- Parser : SQL 문장을 분석하여 문법 검사와 구성요소를 파악하고 이를 파싱해서 파싱 트리 생성
- Query Transformer : 파싱된 SQL문을 보고 같은 결과를 도출하되, 좀 더 나은 실행계획을 갖는 SQL로 변환이 가능한지 판단하여 변환 작업 수행
- Estimator : 시스템 통계정보를 딕셔너리로부터 수집하여 SQL을 실행할때 소요되는 총비용 계산
- Plan Generator : Estimator를 통해 계산된 값들을 토대로 후보군이 되는 실행계획 도출
- Row-Source Generatoe : 옵티마이저가 생성한 실행계획을 SQL엔진이 실제 수행할 수 있는 코드나 프로시저 형태로 포맷팅
- SQL Engine : SQL 실행