오라클 9I PARTITION INDEX 안태우는 법(위에 글 재정리해서 새로 올렸습니다.) 0 8 2,209

by 빈이 [Oracle Tuning] PARTITION INDEX [2017.04.17 11:02:37]


SELECT /*+ USE_NL(A B) INDEX(T1 IDX_ID_01) INDEX(T2 IDX_ID_01) */

*

FROM T1, T2

WHERE T1.ID IN (1,2,3)

AND T1.ID = T2.ID(+)

AND T2.COL2(+) = 'KKK';

 

위와 같은 SQL를 사용했습니다.

T2 테이블에는 CREATE_DT 필드에 PARTITION 분할을 하고 있습니다.

위 SQL을 사용하면 제가 원한 T2.ID 필드의 INDEX를 드라이빙하지 않고 PARTITION RANGE ALL을 드라이빙 하고 있더라구요.

문의드릴 내용은 PARTITION INDEX를 사용하지 않고 T2.IDX_ID_01의 INDEX를 강제로 태우고 싶습니다.

어떻게 힌트를 주면 제가 원하는 INDEX를 태울수 있을까요?

by chrome [2017.04.17 11:14:53]

통계정보를 통해 T1이 더 크기 때문에 T2의 INDEX를 탐색해서 T1을 가져오는 

RIGHT JOIN을 택한것으로 예상되는데요.

 

LEADING(A)힌트를 주시면 T1 위주로 돌겁니다.


by 빈이 [2017.04.17 11:18:42]

먼저 답변 감사드립니다.

첫번째로 준 T1 IDX_ID_01을 먼저 드라이빙 되고 있습니다.

위의 인덱스를 타고, 두번째로 준 T2 IDX_ID_01을 태우고 싶은데 T2의 IDX를 타는게 아니라 CREATE_DT의 PARTITION INDEX가 사용되고 있습니다.


by chrome [2017.04.17 13:33:33]

실행계획과 인덱스 정보등이 첨가 되면 좋겠습니다.

 


by 빈이 [2017.04.17 14:24:24]

Execution Plan
--------------------------------------------------------------------------------
   0      SELECT STATEMENT Optimizer=CHOOSE (Cost=9 Card=1 Bytes=4K)
   1    0   WINDOW (SORT) (Cost=9 Card=1 Bytes=4K)
   2    1     NESTED LOOPS (OUTER) (Cost=6 Card=1 Bytes=4K)
   3    2       INLIST ITERATOR
   4    3         TABLE ACCESS (BY INDEX ROWID) OF 'TAB1' (Cost=1 Card=1 Bytes=4K)
   5    4           INDEX (RANGE SCAN) OF 'PK_TAB1' (UNIQUE) (Cost=2 Card=1)
   6    2       PARTITION RANGE (ALL)
   7    6         TABLE ACCESS (FULL) OF 'TAB2' (Cost=5 Card=1 Bytes=167)

 

실행계획은 위와 같습니다.

T2에는 CREATE INDEX IDX_T2_ID_01 ON T2 (ID);

이렇게 제가 사용하고 싶은 INDEX가 1개 더 있습니다.

T2테이블의 PARTITION 은 T2.CREATE_dT <-- 필드에 월별로 분할해서 적용되어있습니다.


by 빈이 [2017.04.17 14:38:29]

글 재정리 해서 새로 올렸습니다.

혹시 시간 되시면 다시 봐주시면 감사하겠습니다.


by 마농 [2017.04.17 13:06:46]

인덱스 안타게 하는 힌트 사용해 보세요.
  - NO_INDEX


by 빈이 [2017.04.17 14:26:00]

제가 글에는 PARTITION INDEX라고 적었었네요.

INDEX 명으로 타는게 아니여서 NO_INDEX(T2 ??)에 뭘 넣어야 할지 모르겠습니다.

   6    2       PARTITION RANGE (ALL)
   7    6         TABLE ACCESS (FULL) OF 'TAB2' (Cost=5 Card=1 Bytes=167)


by 빈이 [2017.04.17 14:38:36]

글 재정리 해서 새로 올렸습니다.

혹시 시간 되시면 다시 봐주시면 감사하겠습니다.

댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입