본문 바로가기
IT/Back-End

[오라클] 인덱스 힌트 사용방법(Oracle index hint)

by 피리부는 공대생 2020. 2. 13.

INDEX

/*+ INDEX (table index [index] [index] ... ) */

-  지정한 테이블의 인덱스 스캔을 실행하도록 유도합니다.

-  Domain, B-tree, bitmap, bitmap join 인덱스 등이 사용될 수 있으나, bitmap 인덱스 들의 사용 시, INDEX 힌트보다는

   INDEX_COMBINE 힌트 사용이 추천됩니다.

예)

SELECT /*+ INDEX(TB_BUTTON_USE IDX_TB_BUTTON_USE_01) */ *

FROM TB_BUTTON_USE

WHERE USE_DT BETWEEN TO_DATE('','') AND TO_DATE('','')

 

INDEX_ASC

/*+ INDEX-ASC (table [index] [index] ... ) +/

- 해당 테이블의 인덱스를 순차적 방식으로 스캔한다

예) 인덱스를 오름차순 정렬하여 첫번째 결과만 가져온다

SELECT /*+ INDEX_ASC(UMS_LOG IDX_UMS_LOG_02)*/

      DECODE(STATUS, '1', '전송중', '2', '전송완료', '전송실패')

FROM UMS_LOG

WHERE ETC1 = CM.CONTRACTMST_NO AND ETC3 = '2' AND ROWNUM = 1

 

INDEX_COMBINE

/*+ INDEX_COMBINE (table [index] [index] ... ) +/

- 해당 테이블에 Bitmap 인덱스의 존재 시, Bitmap 인덱스를 통한 액세스를 유도합니다.

- 힌트 내에 인덱스의 이름이 쓰여지지 않을 시, 해당 인덱스의 Boolean 값을 사용하여 최적의 Cost를 산출하여 실행하게

   됩니다.

 

INDEX_DESC

/*+ INDEX_DESC (table [index] [index] ... ) +/

- 지정한 인덱스에 대해 인덱스 스캔을 역순으로 스캔한다.

예) 인덱스를 내림차순 정렬하여 첫번째 결과만 가져온다

SELECT /*+ INDEX_ASC(UMS_LOG IDX_UMS_LOG_02)*/

      DECODE(STATUS, '1', '전송중', '2', '전송완료', '전송실패')

FROM UMS_LOG

WHERE ETC1 = CM.CONTRACTMST_NO AND ETC3 = '2' AND ROWNUM = 1

 

HASH_SJ

- 세미조인(SEMI_JOIN)은 EXISTS를 사용하는 서브쿼리에 인덱스가 없을 경우 사용한다.

  인덱스가 있을 경우에 사용할 경우에 성능상에 큰 차이는 없다. 오히려 검색 속도를 저하시킬 우려가 있다.

  다만 서브퀘리에 사용하는 테이블에 인덱스가 여러가 있을 경우 특정 인덱스를 hint 로 사용하여

  검색 속도를 향상시킬 수 있다.

 

SELECT *

FROM TB_COMP A

WHERE EXISTS (

   SELECT /*+ HASH_SJ INDEX(TB_CONTRACT_MST IDX_TB_CONTRACT_MST_01) */ 'X'

   FROM TB_CONTRACT_MST

   WHERE A.COMP_NO = COMP_NO

)



출처: https://anomiea.tistory.com/3 [나의 일상이다반사]

댓글