본문 바로가기

프로그래밍/oracle

oracle - [Hint]ACCESS 경로를 변경하는 힌트(INDEX)

반응형

[Hint]ACCESS 경로를 변경하는 힌트(INDEX)
 
 
[Hint]ACCESS 경로를 변경하는 힌트(INDEX)

이 힌트는 생긴 그대로 테이블에 있는 인덱스를 사용할 수 있도록 해주는 구문 입니다. 비트맵 인덱스에 대해서는 사용이 가능하지만 INDEX_COMBINE 힌트를 쓰는 것이 맞구요…

사용법은 다음과 같습니다.

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

[예]

우선 통계정보를 생성하고 인덱스를 만들지 않은 상태에서 …

analyze table emp compute statistics

select ename, sal
from   emp
where  ename = 'FORD'

----------------------------------------------------------------------
Operation        Object Name        Rows        Bytes        Cost        SELECT STATEMENT
--------------------------------------------------------------------
Optimizer Mode=ALL_ROWS                1                   3                                 
  TABLE ACCESS FULL        SCOTT.EMP        1          9          3                                                     

이번엔 인덱스를 만들고 INDEX 힌트를 사용해 보도록 하죠…

create index idx_emp_ename on emp(ename)

select /*+ index(emp idx_emp_ename) */
       ename, sal
from   emp
where  ename = 'FORD'


Execution Plan
---------------------------------------------------------------
Operation        Object Name        Rows        Bytes        Cost        SELECT STATEMENT
--------------------------------------------------------------Optimizer Mode=ALL_ROWS                1                   2                                 
  TABLE ACCESS BY INDEX ROWID        SCOTT.EMP        1          9          2          
    INDEX RANGE SCAN        SCOTT.IDX_EMP_ENAME        1                   1 

 

만약 테이블 다음에 인덱스명을 기술하지 않으면 Optimizer는 적절한 인덱스를 알아서 찾아 실행 계획을 수립합니다.

select /*+ index */
       ename, sal
from   emp
where  ename = 'FORD'


---------------------------------------------------------------
Operation        Object Name        Rows        Bytes        Cost        SELECT STATEMENT
--------------------------------------------------------------Optimizer Mode=ALL_ROWS                1                   2                                 
  TABLE ACCESS BY INDEX ROWID        SCOTT.EMP        1          9          2          
    INDEX RANGE SCAN        SCOTT.IDX_EMP_ENAME        1                   1


만약 테이블명 다음에 인덱스명을 여러 개 나열한다면 오라클 서버의 Optimizer는 적정한 인덱스를 찾아 실행 계획을 수립합니다.

/* INDEX(EMP pk_emp idx_emp_enmae */

 

반응형