CHOOSE : 통계정보의 생성여부에 따라 Cost-Based Approach (ALL_ROWS) 와 Rule-Based Approach 중 선택
ALL_ROWS : Cost-Based Approach 사용 (Best Throughput 이 목적)
FIRST_ROWS : Cost-Based Approach 사용 (Best Response Time 이 목적)
RULE : 미리 정해져 있는 Approach Rule에 의해 Access Path 결정
2. 옵티마이저 모드 설정
2-1. 인스턴스 레벨
§ Initial Paramemer($ORACLE_HOME/dbs/initSID.ora)에 기술
§ OPTIMIZER_MODE = CHOOSE
2-2. 세션 레벨
§ ALTER SESSION SET OPTIMIZER_MODE = RULE;
§ ALTER SESSION SET OPTIMIZER_GOAL = RULE;
2-3. 구문 레벨
§ ORACLE Hint 사용 (/*+ hint */)
§ RULE, CHOOSE, FIRST_ROWS, ALL_ROWS
3. RBO, CBO
3-1. RBO(Rule Based Optimizer)
3-1-1. RBO란?
미리 정해진 규칙에 의한 실행계획 결정 : 연산자 우선순위, 접근 경로의 우선순위, SQL문의 syntax 규칙
데이터에 대한 통계 내지 실제 SQL을 수행할 경우에 소요될 비용에 대한 고려를 하지 않음 : 인덱스를 쓰려면 내가 찾고자 하는 데이터가 대략 5% 이내라면 써도 되나 꼭 모든 경우에 그런 것은 아니다. 테이블에 총 데이터 건수가 굉장히 많다면 5% 이내라 해도 풀테이블스캔이 더 효율적일 수 있다. 하지만 RBO는 무조건 인덱스가 있으면 인덱스를 타버려 인덱스의 효율이 없음.
RBO는 오라클6버전 이하와의 역호환성을 위해 지원
3-1-2. Ranking
ROWID에 의한 1 Row Access
Cluster join 에 의한 1 Row Access
Unique or Primary Key에 의한 1 Row Access
Composite key
Single-Column Indexes
Indexed column 의 범위 검색
Indexed column full scan
Full Table Scan
3-2. CBO
3-2-1. CBO란?
데이터에 대한 각종 통계를 사용
실제 SQL을 수행할 때 소요될 비용을 예측하고 그 값을 기준으로 실행계획 결정 (I/O 횟수, CPU 사용량, 메모리 사용량, 네트워크 전송량)