오라클자바커뮤니티에서 설립한 오엔제이프로그래밍 실무교육센터
(신입사원채용무료교육, 오라클SQL, 튜닝, 힌트,자바프레임워크, 안드로이드, 아이폰, 닷넷)
오라클 옵티마이저는 SQL 문법에 기반하거나 내장된 규칙을 이용하여 실행 계획을 수립 합니다.
OPTIMIZER_MODE = CHOOSE 라고 하고 통계 정보가 없고 SQL 문에서 힌트를 사용하지 않았다면 옵티마이저는 RBO를 이용 합니다. 또한 초기 파일에(init.ora)에 OPTIMZER_MODE=RULE이라고 정의 한 경우에 RBO를 사용 합니다.
RBO의 내부 규칙은 테이블의 레코드 건수, 컬럼값의 분포도 같은 통계치 와는 무관 합니다.
참고로 OPTIMIZER_MODE = FIRST_ROWS, FIRST_ROWS_n, ALL_ROWS라고 설정 하면 통계 정보의 생성 유무와 관계 없이 CBO를 이용 합니다.
따라서 조정이 어려우며 조정 가능한 범위 또한 제한적 입니다.
From 절에서 테이블의 순서를 바꾸거나, WHERE절에서 술어의 순서 변경, 인덱스의 생성 또는 삭제, 기타 Syntax의 트릭 등을 이용 하여 조정이 가능 합니다.
아래에 15가지 규칙을 나열 해 보았습니다.
1. Single row by ROWID
2. Single row by cluster join
3. Single row by hash cluster with unique or primary key
4. Single row by unique or primary key
5. Cluster join
6. Hash cluster key
7. Indexed cluster key
8. Composite key
9. Single column indexes
10. Bounded range on index columns
11. Unbounded range on indexed columns
12. Sort merge join
13. MAX or MIN on indexed column
14. ORDER BY on indexed columns
15. FULL TABLE SCAN
예를들면 액세스 경로를 추출 하는데 순위9인 single column index를 이용하는 방법과 single row by unique or primary key를 이용하는 두가지 방법이 가능하다면 오라클 옵티마이저는 순위 4인 single row by unique or primary key를 선택하게 된다는 겁니다.
다음 강좌에는 RBO의 15가지의 경우에 대해 하나씩 살펴 보도록 하겠습니다.
감사합니다.
댓글 없음:
댓글 쓰기