본문 바로가기

프로그래밍/oracle

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

반응형

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

명시적으로 몇 개의 단일 인덱스를 이용하여 추출한 데이터를 병합하라는 힌트 입니다. 즉 WHERE절에 ename=”SMITH’ and sal > 1000 이라는 조건이 주어졌다면 idx_emp_ename 인덱스(EMP 테이블의 ename컬럼에 대한 단일 인덱스)와 idx_emp_sal 인덱스(EMP 테이블의 sal 컬럼에 대한 단일 인덱스)를 이용하여 각각 데이터를 추출한 후 이를 병합하는 실행 계획을 세우게 됩니다.

[형식]
/*+ AND_EQUAL ( table index index [index] [index] [index] ) */


alter session set Optimizer_mode = CHOOSE

create index idx_emp_ename on emp(ename)
create index idx_emp_job on emp(job)

analyze table emp compute statistics

SELECT ename, sal
FROM   EMP
WHERE  ENAME = 'SMITH'
AND    JOB   = 'CLERK'

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

 

-------------------------------------
-- 이전엔 AND_EQUAL을 사용합니다…!!
-------------------------------------
SELECT /*+ AND_EQUAL(EMP idx_emp_ename idx_emp_job) */
       ENAME, SAL
FROM   EMP
WHERE  ENAME = 'SMITH'
AND    JOB   = 'CLERK'

Operation        Object Name        Rows        Bytes        Cost        SELECT STATEMENT Optimizer Mode=CHOOSE                1                   2                                 
  TABLE ACCESS BY INDEX ROWID        SCOTT.EMP        1          16          2          
    AND-EQUAL                                                                   
      INDEX RANGE SCAN        SCOTT.IDX_EMP_ENAME        1                   1
      INDEX RANGE SCAN        SCOTT.IDX_EMP_JOB        3                   1 


AND_EQUAL 힌트에 의해 실행계획이 바뀐 것을 확인 할 수 있는데 ,실행 계획에
AND-EQUAL이 나타난다고 성능이 좋다고 볼 수는 없습니다.                                             
 
 
 

 

반응형