Optimizer :
SQL에 대한 최적의 execution plan을 수립하는 Server process
* Rule-Based Optimizer
하나의 SQL에 대한 여러 개의 execution plan 가운데 가장 높은 순위의 execution plan을 항상
사용한다.(Rank Rule 사용) - 그냥 무조건 인덱스를 사용하려고 한다라고 생각하믄 된다.
- 경험적으로 순위가 매겨진 오퍼레이션에 기초한 실행계획을 선택한다.
- SQL문을 실행하기 위한 방법이 하나 이상 있다면, 규칙기준 접근 방식은 순위가 높은
(적은 숫자의) 오퍼레이션을 이용 한다.
- 순위가 높은 오퍼레이션은 순위가 낮은 오퍼레이션보다 더 빨리 실행된다.
- 수립될 실행계획이 예측 가능하기 때문에 사용자가 원하는 처리 경로로 유도하기 쉽다.
part 2 : Single Row by Cluster Join
part 3 : Single Row by Hash Cluster Key with Unique or Primary key
part 4 : Single Row by Unique or Primary Key
part 5 : Cluster Join
part 6 : Hash Cluster Key
part 7 : Indexed Cluster Key
part 8 : Composite Index
part 9 : Single Column Index
part 10 : Bounded Range Search on Indexed Columns
part 11 : Unbounded Range Search on Indexed Columns
part 12 : Sort-Merge Join
part 13 : MAX or MIN of Indexed Column
part 14 : ORDER BY on Indexed Column
part 15 : Full Table Scan
* Cost-Based Optimizer
하나의 SQL에 대한 여러 개의 execution plan 가운데 가장 cost가 적은 execution plan을 선택
한다.
- 목적은 대상 Row를 처리하는데 필요한 자원 사용을 최소화
--> 궁극적으로 데이터를 빨리 처리하는데 목적
- 비용산정 요소로는 각종 통계정보, SQL형태, hint, optimizer mode, 연산자, index, cluster,
DBMS 버전, CPU 용량, 메모리 용량, Disk I/O, LINK N/W 비용 등 매우 다양하다.
- 비용산정 요소 중에서 Data Dictionary 내의 테이블/클러스터 /인덱스에 대한 통계와 데이터
분포를 중요시 한다.
- CBO의 성능을 최적의 상태로 유지시키기 위해서는 ANALYZE OBJECT 작업을 정기적으로
해주는 것이 가장 중요하다.
※ 9i까지는 둘다 사용한다고 한다. 10 버젼부터는 CBO만 사용한다고 하는데...
※ 오라클은 기본적으로 둘중에서 선택적으로 사용한다고 하는데 데이터 베이스 구축 후
통계정보를 생성(ANALYZE..)하지 않는 경우가 많기 때문에 기본적으로 RBO라고
생각하믄 된다..
※ ANALYZE
ANALYZE {TABLE/INDEX/CLUSTER} OBJECT_NAME
{COMPUTE/ESTIMATE/DELETE} STATISTICS;
- 테이블을 ANALYZE 하면 INDEX 들은 같이 ANALYZE 됨
- ANALYZE 작업을 새로이 수행해야 하는 경우
테이블이 재 생성된 경우
새로 클러스터링을 한 경우
인덱스를 추가 혹은 재 생성한 경우
다량의 데이터를 SQL이나 배치 어플리케이션을 통해 작업 한 경우
결산작업이 끝난 경우
- ANALYZE 작업여부를 확인하는 방법
SQL> select table_name , last_analyzed, num_rows from user_tables;
결과 예)
TABLE_NAME LAST_ANAL NUM_ROWS
----------------------------------- ------------ ----------
EC_COURSE_PLAN 30-JAN-03 607345
EC_COURSE_PLAN_PARTED_YEAR 30-JAN-03 607345
EC_COURSE_SQ 30-JAN-03 21092
EC_COURSE_SQ_IDXMERGE
[출처] [오라클]RBO란, CBO란...|작성자 찬돌팍