옵티마이저 행동에 영향을 미치는 요소 

 - SQL과 연산자 형태 

     ● 결과 같더라도 SQL을 어떤 형태로 작성했는지 또는 연산자를 사용했느지에 따라 

         옵티마이저가 다른 선택을 할 수 있고, 궁극적으로 쿼리 성능에 영향을 미친다. 

 - 인덱스, IOT, 클러스터링, 파티셔닝, MV 등 옵티마이징 팩터 

 - 제약 설정 : PK, FK, Not Null, Check 

     ● PK 제약과 옵티마이저 

          예시) 서브쿼리를 Unnesting 하고서 서브쿼리 테이블 기준으로 NL 조인하려 할 때, 

                  만약 고객 테이블에 PK 제약이 없다면 고객번호 중복을 제거한느 sort unique 

                  오퍼레이션을 먼저 수행해야 한다. 

     ● FK 제약과 옵티마이저 

          예시) 조인 제거 기능과 FK 제약이 있을 때만 작동하는 기능들이 여러 있는데, 

                  11g에 추가된 Reference 파티셔닝도 그 중 하나다. 

     ● Not Null 제약과 옵티마이저 

          예시) where 절 없이, group by 절을 사용하면 index가 있다면 index full scan 또는 

                  index fast full scan으로 빠르게 처리할 수 있다. 하지만 이 경우 not null 제약이 

                  있어야 하며 not null 제약이 없을 시 null 값이 입력될 가능성을 염두에 두고 

                  실행계획을 수립해야 하므로 테이블 전체를 스캔한다. 

     ● Check 제약과 옵티마이저 

          예시) check 제약이 있을 시 where 절에 조건에 따라 filter 작업이 발생하지 않는다. 

                 파티션 뷰에서 참조하는 테이블에 check 제약을 설정하면 파티션 pruning 기능 작동


  - 옵티마이저 힌트 

      ● 옵티마이저 힌트가 제대로 작동하지 않는 경우 

           - 문법적으로 맞지 않게 힌트를 기술 

           - 잘못된 참조 사용 

           - 의미적으로 맞지 않게 힌트를 기술 

           - 논리적으로 불가능한 엑세스 경로 

           - 버그 

      ● 옵티마이저 힌트에 관한 일반적인 사용 원칙은 다음과 같다. 

           - 가급적 힌트 사용을 자제하고, 옵티마이저가 스스로 좋은 선택을 할 수 있도록 돕는다. 

           - 옵티마이저가 잘못된 선택을 할 때만 힌트를 사용한다.   

  - 통계정보 : 오브젝트 통계, 시스템 통계 

      ● CBO의 모든 판단 기준은 통계정보에서 나온다. 

  - 옵티마이저 관련 파라미터

      ● 만약 옵티마이저의 갑작스런 변화를 원치 않는다면 optimizer_features_enable 파라미터

           를 이전 버전으로 설정하면 된다.  

  - DBMS 버전과 종류 

+ Recent posts