반응형
전통적으로 index 힌트를 사용하는 방법은 다음과 같다.
select /*+ index(t_index t_index_idx1) */ count(*)
from t_index
where c1 > 0 and c2 > 0;
이 방식의 한 가지 단점은 Index 이름이 변경되는 경우에는 해당 인덱스를 사용하지 못할 수도 있다는 것이다. Oracle 10g에서는 다음과 같은 새로운 Syntax가 추가되었다.
select /*+ index(t_index t_index(c1)) */ count(*)
from t_index
where c1 > 0 and c2 > 0;
즉, index 이름 대신 Index를 구성하는 컬럼명을 사용할 수 있다. 다중 컬럼 인덱스인 경우에는 /*+ index(t_index t_index(c1,c2,c3)) */ 와 같이 사용할 수 있다.
Index의 이름이 변경될 때의 피해도 줄일수 있고, 힌트도 훨씬 명확해지는 장점이 있다. 어떤 컬럼을 사용하는 인덱스인지 힌트를 보고 바로 알 수 있다.
10.2.0.3 버전에서는 아래와 같은 힌트가 추가되었다.
* index_rs
* index_rs_asc
* index_rs_desc
Index range scan 전용 힌트가 추가된 셈이다. Optimizer의 일부 문제로 인해 Index 힌트를 사용하는 경우 index range scan이 효율적임에도 불구하고 index full scan(index fast full scan과 헷갈리면 안됨!!)이 선택되는 문제가 발견되었다. 그래서 이런 문제를 원천적으로 해결할 수 있도록 새로운 힌트가 추가된 것이다.
10g 사용자라면 이러한 새로운 힌트를 사용함으로써 index 힌트 사용에서 오는 일부 껄끄러운 문제를 손쉽게 해결할 수 있을 듯하다.
select /*+ index(t_index t_index_idx1) */ count(*)
from t_index
where c1 > 0 and c2 > 0;
이 방식의 한 가지 단점은 Index 이름이 변경되는 경우에는 해당 인덱스를 사용하지 못할 수도 있다는 것이다. Oracle 10g에서는 다음과 같은 새로운 Syntax가 추가되었다.
select /*+ index(t_index t_index(c1)) */ count(*)
from t_index
where c1 > 0 and c2 > 0;
즉, index 이름 대신 Index를 구성하는 컬럼명을 사용할 수 있다. 다중 컬럼 인덱스인 경우에는 /*+ index(t_index t_index(c1,c2,c3)) */ 와 같이 사용할 수 있다.
Index의 이름이 변경될 때의 피해도 줄일수 있고, 힌트도 훨씬 명확해지는 장점이 있다. 어떤 컬럼을 사용하는 인덱스인지 힌트를 보고 바로 알 수 있다.
10.2.0.3 버전에서는 아래와 같은 힌트가 추가되었다.
* index_rs
* index_rs_asc
* index_rs_desc
Index range scan 전용 힌트가 추가된 셈이다. Optimizer의 일부 문제로 인해 Index 힌트를 사용하는 경우 index range scan이 효율적임에도 불구하고 index full scan(index fast full scan과 헷갈리면 안됨!!)이 선택되는 문제가 발견되었다. 그래서 이런 문제를 원천적으로 해결할 수 있도록 새로운 힌트가 추가된 것이다.
10g 사용자라면 이러한 새로운 힌트를 사용함으로써 index 힌트 사용에서 오는 일부 껄끄러운 문제를 손쉽게 해결할 수 있을 듯하다.
반응형
'ORACLE > TUNING' 카테고리의 다른 글
통계정보의 이해 (0) | 2009.03.03 |
---|---|
진실 or 거짓 : CBO에게는 DUAL이 1건이 아니라 4072건이다. (0) | 2009.02.09 |
ORACLE HINT 정리 (0) | 2009.02.09 |
DML의 INSERT 성능 향상 (0) | 2009.02.09 |
db_file_multiblock_read_count 파라미터의 몰락... (0) | 2009.02.07 |