사용자가 요구한 결과를 가장 최소의 자원으로 처리할 수 있는 방법을 찾아내는 것 |
1 | 최초 실행한 SQL은 데이터 딕셔너리를 참조하여 파싱을 수행 옵티마이저는 파싱된 결과를 이용해 논리적으로 적용 가능한 실행계획 형태를 골라내고, 힌트를 감안하여 일차적으로 잠정적인 실행계획들을 생성 |
---|---|
2 | 통계정보를 기반으로 데이터의 분포도와 테이블의 저장 구조의 특성, 인덱스 구조, 파티션 형태, 비교연산자 등을 감안하여 각 실행계획의 비용을 계산 비용의 계산에는 컴퓨터의 자원(I/O, CPU, Memory)도 함께 감안됨 |
3 | 비용이 산출된 실행계획들을 비교하여 가장 최소의 비용을 가진 실행계획을 선택 |
양호한 실행계획을 얻을 수 있도록 적절한 형태로 SQL의 모양을 변환
옵티마이져는 비용산정을 위해 선택도(Selectivity), 카디널러티(Cardinality), 비용(Cost)을 측정
히스토그램 정보가 없는 경우 | 통계정보만을 이용해서 선택도를 계산 |
---|---|
히스토그램 정보가 있는 경우 | 미리 계산된 분포값을 직접 활용 |
적용 가능한 실행 계획을 선별하고 비교 검토를 거쳐 가장 최소의 비용을 가진 것을 선택
다양한 적용 가능한 실행계획 형태에 대해 비교평가를 하지만 그렇다고 해서 논리적으로 존재하는 모든 것에 대해 시도를 하지는 않는다.