BACKEND/공부

SQL :: 데이터베이스 옵티마이저(Optimizer)

neeon 2023. 9. 13. 11:20
728x90

Database Optimizer 란?

SQL을 가장 빠르고 효율적으로 수행할 최적의 처리 경로를 생성해주는 DBMS 내부의 핵심 엔진

 

옵티마이저의 SQL 최적화 과정

1. 사용자가 던진 쿼리 수행을 위하여, 후보군이 될 만한 실행계획을 찾는다.

2. 데이터 딕셔너리(Data Dictionary)에 미리 수집해 놓은 오브젝트 통계 및 시스템 통계 정보를 이용해 각 실행 계획의 예상 비용을 산정한다.

3. 각 실행계획을 비교하여 최저 비용을 갖는 하나를 선택한다.

 

옵티마이저의 필요성

- 작성한 SQL문을 어떤 식으로 실행하느냐에 따라 성능이 달라진다.

- 옵티마이저가 비효율적으로 실행 계획을 수립하면, SQL 개발자는 SQL을 개선해야 한다.

- 옵티마이저에게 실행 계획을 변경하도록 요청할 수 있는데 이때 힌트(HINT)/MSSQL, 옵션(OPTION)을 사용한다.

 

옵티마이저의 종류

항목 규칙 기반 옵티마이저 비용 기반 옵티마이저
개념 사전에 정의된 규칙 기반 최소 비용 계산하여 실행계획 수립
기준 실행 우선 순위(Ranking) 액세스 비용(Cost)
인덱스 인덱스 존재 시 가장 먼저 사용 Cost에 의한 결정
성능 사용자 SQL 작성 숙련도에 따라 달라짐 옵티마이저 예측 성능으로 진행
장점 실행 루트 예상 가능 통계 정보를 통한 현실 요소 적용
단점 예측되는 통계 정보 무시 예측 제어가 어려움

* MSSQL/ORACLE 은 기본 비용 기반 옵티마이저임

 

옵티마이저 엔진

옵티마이저 설명
Query Transformer SQL문을 효율적으로 실행하기 위해 옵티마이저가 변환
Estimator 통계 정보를 사용하여 SQL 실행 비용을 계산함. 총 비용은 최적 실행 계획을 수립하기 위함이다.
Plan Generator SQL을 실행할 실행 계획을 수립.

 

옵티마이저 엔진 실행 순위

* 규칙 기반 옵티마이저(RBO) 구현 시 참고

우선 순위 Decs.
1 ROWID를 사용한 단일 행인 경우
2 클러스터 조인에 의한 단일 행인 경우
3 유일하거나 기본키(Primary Key)를 가진 해시 클러스터 키에 의한 단일 행인 경우
4 유일하거나 기본키(Primay Key)에 의한 단일 행인 경우 
5 클러스터 조인인 경우
6 해시 클러스터 조인인 경우
7 인덱스 클러스터 조인인 경우
8 복합 칼럼 인덱스인 경우
9 단일 칼럼 인덱스인 경우
10 인덱스가 구성된 컬럼에서 제한된 범위를 검색하는 경우
11 인덱스가 구성된 컬럼에서 무제한 범위를 검색하는 경우
12 정렬-병합(Sort-Merge) 조인인 경우
13 인덱스가 구성된 칼럼에서 MAX/MIN을 구하는 경우
14 인덱스가 구성된 칼럼에서 Order By를 실행하는 경우 
15 전체 테이블을 스캔(Full Table Scan)하는 경우

 

728x90