[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이 나타난다고 성능이 좋다고 볼 수는 없습니다.
'프로그래밍 > oracle' 카테고리의 다른 글
oracle - [Hint]ACCESS 경로를 변경하는 힌트(INDEX) (0) | 2012.07.19 |
---|---|
oracle - [Hint]ACCESS 경로를 변경하는 힌트(HASH) (0) | 2012.07.19 |
oracle - [Hint]ACCESS 경로를 변경하는 힌트(FULL) (0) | 2012.07.19 |
oracle - [Hint]ACCESS 경로를 변경하는 힌트(CLUSTER) (0) | 2012.07.19 |
oracle - [Hint]10g에서 유효하지 않는 힌트들 (0) | 2012.07.19 |