본문 바로가기

프로그래밍/oracle

oracle - [Hint]조인순서 변경(STAR_TRANSFORMATION)

반응형

[Hint]조인순서 변경(STAR_TRANSFORMATION)


이전 강좌의 STAR HINT와 유사 하지만 몇 가지 다른 점이 있습니다. /*+ STAR */ 힌트 구문을 사용할 때 되면 나타나는 CARTESIAN PRODUCT(Dimension Table의 건수가 몇 건 되지 않아 큰 문제는 되지 않지만…)이 /* STAR_TRANSFORMATION */을 사용할 때는 나타나지 않습니다.


Dimension Table의 수가 적고, FACT TABLE의 수가 굉장히 많을 때는 일반적으로 STAR HINT가 유용하며 Dimension Table의 수가 많거나 FACT TABLE의 수가 그리 크지 않으면서 연관된 Dimension Table에 대한 제한 조건 절이 없다면 STAR_TRANSFORMATION HINT를 사용하는 것이 유용 합니다.


STAR_TRANSFORMATION을 사용하기 위해서는 다음과 같은 조건이 만족되어야 합니다.


-        비용기반 옵티마이저 모드이어야 합니다.

-        FACT TABLE의 컬럼중 Dimension TABLE과 외래키 컬럼에 있는 테이블은 비트맵 인덱스가 존재해야 합니다.

-        initSID.ora/spfileSID.ora 설정 파일의 STAR_TRANSFORMATION_ENABLED 값이 TRUE가 되어 있어야 합니다.


물론 세션 레벨에서 ALTER SESSION SET STAR_TRANSFORMATION_ENABLED = TRUE 라고 하셔도 되구요~


[형식]

/*+ STAR_TRANSFORMATION */


[예]

아래에서는 sales 테이블이 FACT 테이블이며 나머지 테이블은 Dimension Table 입니다.


SELECT /*+ STAR_TRANSFORMATION */

ch.channel_class, c.cust_city, t.calendar_quarter_desc,

   SUM(s.amount_sold) sales_amount

FROM sales s, times t, customers c, channels ch

WHERE s.time_id = t.time_id

AND   s.cust_id = c.cust_id

AND   s.channel_id = ch.channel_id

AND   c.cust_state_province = 'CA'

AND   ch.channel_desc in ('Internet','Catalog')

AND   t.calendar_quarter_desc IN ('1999-Q1','1999-Q2')

GROUP BY ch.channel_class, c.cust_city, t.calendar_quarter_desc;

 

 

 

 


반응형