ACCESS 경로를 변경하는 힌트(INDEX)
구로디지털 오엔제이프로그래밍실무교육센터
이 힌트는 생긴 그대로 테이블에 있는 인덱스를 사용할 수 있도록 해주는 구문 입니다. 비트맵 인덱스에 대해서는 사용이 가능하지만 INDEX_COMBINE 힌트를 쓰는 것이 맞구요…
사용법은 다음과 같습니다.
[형식]
[예]
SQL> select index_name, table_name from user_indexes
2 where table_name = 'MYEMP1';
INDEX_NAME TABLE_NAME
------------------------------ ------------------------------
IDX_MYEMP1_DEPTNO MYEMP1
SYS_C0011302 MYEMP1
인덱스가 있는 경우 where 절에 인덱스 컬럼이 보이면 오라클이 알아서 인덱스를 경유하여 데이터를 추출 한다.
SQL> select count(*) from myemp1
2 where deptno = 2;
COUNT(*)
----------
2000000
경 과: 00:00:00.75
--------------------------------------------------------------------| 0 | SELECT STATEMENT | | 1 | 2 | 3867 (1)|
| 1 | SORT AGGREGATE | | 1 | 2 | |
|* 2 | INDEX RANGE SCAN| IDX_MYEMP1_DEPTNO | 2000K| 3906K| 3867
이번에는 인덱스를 숨겨보자. 숨긴 후 실행하면 9초 정도 걸린다.
SQL> alter index IDX_MYEMP1_DEPTNO invisible;
인덱스가 변경되었습니다.
SQL> select count(*) from myemp1
2 where deptno = 2;
COUNT(*)
----------
2000000
경 과: 00:00:09.93
Execution Plan
----------------------------------------------------------
| 0 | SELECT STATEMENT | | 1 | 2 | 16966 (1)| 00:03:24 |
| 1 | SORT AGGREGATE | | 1 | 2 | | |
|* 2 | TABLE ACCESS FULL| MYEMP1 | 2000K| 3906K| 16966 (1)|
다시 인덱스 보이도록 설정.
SQL> alter index IDX_MYEMP1_DEPTNO visible;
인덱스가 변경되었습니다.
Index 힌트만 사용한다면 오라클은 적절한 인덱스를 알아서 찾아 경유한다.
SQL> select /*+ index */
2 count(*)
3 from myemp1
4 where deptno = 2;
COUNT(*)
----------
2000000
경 과: 00:00:00.11
Execution Plan
----------------------------------------------------------
| 0 | SELECT STATEMENT | | 1 | 2 | 3867 (1)|
| 1 | SORT AGGREGATE | | 1 | 2 | |
|* 2 | INDEX RANGE SCAN| IDX_MYEMP1_DEPTNO | 2000K| 3906K| 3867
만약 테이블 명 다음에 인덱스 명을 여러 개 나열한다면 오라클 서버의 Optimizer는 적정한 인덱스를 찾아 실행 계획을 수립합니다.
댓글 없음:
댓글 쓰기