. CBO(비용기반 옵티마이저)
– 쿼리 최적화 과정에 Cost를 계산한다.
– 비용이란 기본적으로, SQL 수행 과정에 수반될 것으로 예상되는 I/O일량을 계산한 것이다.
– 옵티마이저가 비용을 계산할 때, CPU 속도, 디스크 I/O 속도 등도 고려할 수 있다.
– 최신 옵티마이저는 I/O에 CPU 연산 비용을 더해서 비용을 계산한다.
. 전체범위 최적화(ALL_ROWS) 방식의 옵티마이저
– 쿼리의 최종 결과 집합을 끝까지 Fetch하는 것을 전제로, 시스템 리소스를 가장 적게 사용하는 실행계획을 선택한다.
– 부분범위 최적화(FIRST_ROWS)와 비교할 때, Index Scan 보다 Table Full Scan하는 실행계획을 더 많이 생성한다.
– DML 문장은 옵티마이저 모드와 상관없이 항상 전체범위 최적화 방식으로 최적화 한다.
. 통계정보 수집 고려사항
– 시간/주기: 부하가 없는 시간대에 가능한 빠르게 수집을 완료해야 함
– 정확성: 표본 검사하더라도 전수 검사할 때의 통계치에 근접해야 함
– 안전성: 데이터에 큰 변화가 없는데도 매번 통계치가 바뀌지 않아야 함
. 뷰 머징(View Merging)
– 뷰 안에 ROWNUM을 사용한 경우
– 뷰 안에 Window Function을 사용한 경우
– 뷰 안에 UNION 연산자를 사용한 경우