2008/11/24 08:43
※ 이 글은 "실전 SQL 튜닝" 강의를 듣고 개인적인 의견과 함께 정리한 내용입니다.

Cost_based Optimizer는 통계정보를 바탕으로 실행계획을 수립한다. 이는 Rule_based Optimizer보다 진보된 방법이지만 옵티마이저가 통계정보를 바탕으로 실행계획을 수립하기 때문에 sql이 작성자 의도대로 실행되지 않는 경우가 있기 때문에 실행계획 예측이 어렵다. 하지만 이런점은 초보자가 작성한 sql이라도 어느정도 성능을 보장해 주는 역할을 하기도 한다.
 실제 경험상 Oracle 9i에서 10g로 업그레이드만 했을 뿐인데도 쿼리의 실행 속도가 현저하게 빨라진 경우를 본적이 있다. 둘다 Cost_based Optimizer이긴 하지만 10g의 옵티마이저가 좀더 똑똑하다는(다양한 통계정보를 이용해서 실행계획을 잘 짜는) 이야기다. 이렇게 옵티마이저가 발전할 수록 옵티마이저는 최소한의 성능을 보장해 주고 좀더 빠른 실행속도를 보장해 줄 것이다.

 Cost_based Optimizer가 이용하는 통계정보
  1. 테이블의 로우 수와 블럭 수
  2. 블록당 평균 로우 수
  3. 로우의 평균길이
  4. 컬럼별 상수값의 종류
  5. 분포도
  6. 컬럼내의 NULL값의 수
  7. 클러스터링 팩터
  8. 인덱스의 깊이(Depth, Level)
  9. 컬럼의 최대, 최소값
  10. 리프(Leaf) 블록수
  11. 가동 시스템의 I/O, CPU정보
크리에이티브 커먼즈 라이선스
Creative Commons License