728x90
반응형
1. DB Optimizer란?
- SQL을 가장 빠르고 효율적으로 수행할 최적의 처리경로를 생성해주는 DBMS 내부의 핵심 엔진
- SQL 실행 계획을 수립하고 SQL을 실행
- 동일한 결과가 나오는 SQL도 어떻게 실행하느냐에 따라서 성능이 달라지기에, SQL 성능에 중요한 역할
2. 특징
- 데이터 딕셔너리에 있는 오브젝트 통계, 시스템 통계 등의 정보를 사용해서 예상되는 비용 산정
- 여러 개의 실행 계획 중 최저 비용을 갖는 계획을 선택하고 SQL 실행
3. 실행 방법
- SQL 실행 > 파싱을 실행하여 SQL의 문법 검사 및 구문 분석 수행
- 구문 분석 > Optimizer가 규칙 기반 or 비용 기반으로 실행 계획을 수립
- 실행 수립 완료 > 최종적으로 SQL 실행 > 데이터 인출(Fetch)
4. 엔진
- Rule base Optimizer(규칙 기반 옵티마이저)는 15개의 우선 순위를 기준으로 실행 계획 수립
- 최신 Oracle 버전은 비용 기반 옵티마이저를 기본으로 사용
- /*+ RULE */를 사용해서 옵티마이저에서 규칙 기반 옵티마이저로 실행하도록 알려줌
| 우선순위 | 설명 |
| 1 | ROWID를 사용한 단일 행인 경우 |
| 2 | 클러스터 조인에 의한 단일 행인 경우 |
| 3 | 유일하거나 기본키(Primary Key)를 가진 해시 클러스터 키에 의한 단일 행인 경우 |
| 4 | 유일하거나 기본키(Primary Key)에 의한 단일 행인 경우 |
| 5 | 클러스터 조인인 경우 |
| 6 | 해시 클러스터 조인인 경우 |
| 7 | 인덱스 클러스터 키인 경우 |
| 8 | 복합 칼럼 인덱스인 경우 |
| 9 | 단일 칼럼 인덱스인 경우 |
| 10 | 인덱스가 구성된 칼럼에서 제한된 범위를 검색하는 경우 |
| 11 | 인덱스가 구성된 칼럼에서 무제한 범위를 검색하는 경우 |
| 12 | 정렬-병합(Sort-Merge) 조인인 경우 |
| 13 | 인덱스가 구성된 칼럼에서 MAX 혹은 MIN을 구하는 경우 |
| 14 | 인덱스가 구성된 칼럼에서 ORDER BY를 실행하는 경우 |
| 15 | 전체 테이블을 스캔(FULL TABLE SCAN)하는 경우 |
출처 : https://velog.io/@yewon-july/Optimizer
[SQL 최적화의 원리]옵티마이저(Optimizer)
이 게시물은 "SQL 개발자 이론서+기출문제(이기적)"을 참고하여 작성되었습니다. :)
velog.io
728x90
반응형