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는 적정한 인덱스를 찾아
실행 계획을 수립합니다.
댓글 없음:
댓글 쓰기