본문 바로가기

IT/오라클

[오라클] 힌트 /*+role*/ 사용하기

반응형
힌트의 간단한 개요

sql을 실행할 경우 옵티마이저는 최적의 수행방식이라 판단되는 것을 선택하여 처리하는데 경우에 따라서는 옵티마이저가 선택한 수행방식과 실제 최적의 결과가 나올 수 있는 방식이 다른 경우가 있어 이를 사용자의 의도에 따라 실행하고자 할때 사용되는 방식입니다.

select /*+role*/
       , emp_no
       , emp_nm
   from emp
where cdate > '20110101'

role hint 를 사용하는 경우는 옵티마이저가 특정 규칙을 따라 수행을 하라는 의미입니다.

옵티마이저의 수행방식은 위의 경우 인 규칙기준 최적화( Role -Base) 와 통계에 따른 발생비용(Cost)을 기준으로 최적화를 진행하는(Cose - Base) 두 가지의 방식으로 나뉩니다.

sql 대상 테이블의 index 를 절대적으로 활용하여 사전에 정의된 규칙을 따라 실행됩니다.

 RBO 실행 규칙 순서 

 1. ROWID에 의한 단일 행
 2. 클러스터 조인에 의한 단일 행
 3. 고유 키나 기본 키를 가진 해시 클러스터 키에 의한 단일 행
 4. 고유 키 또는 기본 키에 의한 단일 행
 5. 클러스터 조인
 6. 해시 클러스터 키
 7. 인덱스화된 클러스터 키
 8. 조합 인덱스
 9. 단일 열 인덱스
10. 인덱스화된 열에 대해 제한된 범위 검색
11. 인덱스화된 열에 대해 제한되지 않은 범위 검색
12. 정렬 병합 조인
13. 인덱스화된 열의 MAX 또는 MIN
14. 인덱스화된 열에 대한 ORDER BY
15. 전체 테이블 스캔

RBO 의 규칙의 조정은  from 절의 테이블 순서, where의 술어 순서를 변경하거나 Index를 생성 및 재 생성 을 통한 순서 변경을 의미합니다.

반응형