정규화 방법을 SQL문 단위로 설정할 수 있게 하는 힌트이다.
CNF: Conjunctive normal form으로 정규화
DNF: Disjunctive normal form으로 정규화
WHERE절에서 AND, OR와 함께 술어들을 사용하고 AND와 OR의 묶음으로만 정규화되어 있지 않은 경우 두 가지 정규화 방법이 있다. OR들의 술어 묶음을 AND로 묶는 것을 CNF로 정규화한다고 하고, AND들의 술어 묶음을 OR로 묶는 것을 DNF로 정규화한다고 한다.
예를 들어 WHERE I1 = 1 AND ( I3 < 1 OR ( I3 = 3 AND I2 = 1 ) )의 WHERE 절은 다음과 같이 두 가지 형태로 정규화될 수 있다.
CNF로 정규화 한 경우
( I1 = 1 ) AND ( I3 < 1 OR I3 = 3 ) AND ( I3 < 1 OR I2 = 1 )
DNF로 정규화 한 경우
( I1 = 1 AND I3 < 1 ) OR ( I1 = 1 AND I3 = 3 AND I2 = 1 )
알티베이스 최적화 과정에서 대부분 정규화는 CNF 방식을 취하며 경우에 따라 CNF 변환 비용이 매우 크다거나, DNF로 변환하는 것이 인덱스 스캔에 더 유리하여 접근하는 레코드 수가 현저하게 감소하는 경우 DNF로 변환한다.
AND, OR를 매우 복잡하게 사용한 질의의 경우 CNF, DNF로 고려해 유리한 방법으로 정규화하도록 힌트를 주면 좋다.
정규화 방법과 각각의 정규화에 따른 실행 계획이 어떻게 생성되는지 예를 들어 설명한다.
테이블 T1에 IDX1 (I1, I2, I3)의 인덱스가 존재한다고 가정한다.
댓글 없음:
댓글 쓰기