인덱스로 만들 컬럼은 다음과 같은 기준에서 선택한다.
1. WHERE 절에서 function의 input이 아니면서, 빈번히 사용되는 컬럼들.
2. 선별력이 높은 컬럼들 (테이블에서 10% 미만인 데이터)
3. 크기가 적은 테이블에서는 인덱스를 만들지 않는다.
DB에서 retrieve되는 속도가 느릴 경우, 먼저 Execution Plan을 만들어 보면
어떤 인덱스를 사용하는지 알 수 있다. 만약, User가 기대한 생성한 인덱스를
사용하지 않을 경우, 다음에서 설명하고 있는 Hint 절을 추가하여 retrieval
속도를 향상시킬 수 있다.
Optimizer Hint Syntax
-----> SELECT -----> /*+ hint 절*/ ------->
DELETE
UPDATE
또는
-----> SELECT -----> --+ hint 절 ------->
DELETE
UPDATE
Hint 절에는 다음 조건들을 부여할 수 있다.
1. FULL(table_name)
: table을 full scan하길 원할 때 사용함.
2. INDEX(table_name index_name[index])
: 특정 index를 사용하도록 할 때 사용함.
3. INDEX_ASC(table_name index_name[index])
4. INDEX_DESC(table_name index_name[index])
5. AND_EQUALS(table_name index_name index_name[index])
6. ROWID(table_name)
7. CLUSTER(table_name)
8. HASH(table_name)
9. ORDERED
10. USE_MERGE(table_name)
11. USE_NL(table_name)
Hint를 사용하여 특정 index를 사용한 update의 예
(이 결과는 7.3 이상에서 제공되는 auto trace를 사용하는 방법이나
execution plan 또는 tkprof를 이용하여 확인할 수 있다.)
Update /*+ INDEX (e1 e_job) */
Emp e1
SET sal =
(SELECT --+ INDEX (e1 e_dept)
(e1.sal + AVG(e2.sal))/2
FROM emp e2
WHERE e2.deptno = e1.deptno)
WHERE job = 'CLERK'
AND deptno BETWEEN 10 AND 40;
'ORACLE·etc' 카테고리의 다른 글
[복사되는블로그 꼬마갱이] [TOAD] tnsoranames.ora does not exit (0) | 2015.06.22 |
---|---|
[펌]오라클 힌트 (hint) 정렬.. INDEX_DESC (0) | 2010.02.18 |
Oracle optimizer goal, FIRST_ROWS 그리고 ALL_ROWS (0) | 2010.02.12 |
[복사되는블로그 꼬마갱이] ORA-00917: 누락된 콤마 (0) | 2010.02.03 |