ORACLE·etc

[펌]오라클 힌트 (hint) 정렬.. INDEX_DESC

administrators 2010. 2. 18. 17:02

[펌]오라클 힌트 (hint) 정렬.. INDEX_DESC 

 

oracle에서 hint의 사용

by kkaok
2003-06-24



Hint란?

select문을 실행시키면 DB의 옵티마이져가 조건절 또는 join절 등을 고려하여 액세스 경로를 결정한다. 이때 옵티마이저에게 모든 것을 맡기지 않고 사용자가 원하는 보다 좋은 액세스 경로를 선택할 수 있도록 하는 것이 Hint이다.



힌트의 사용 방법

힌트를 사용하는 방법은 "/*+ */"와 "--+"의 두 가지 방법이 있다.

/*+ */ 여러 라인에 걸쳐 기술할 때 사용.
--+ 오직 한 라인에만 기술할 수 있고 칼럼은 반드시 다음 라인에 기술해야 한다.



예제 : kkaok이라는 테이블이 있고 kkaok_indx라는 인덱스를 힌트에 사용한다고 가정한다.

SELECT /*+ INDEX(kkaok kkaok_indx) */ name,content FROM kkaok WHERE rownum<=2  

SELECT --+ INDEX(kkaok kkaok_indx) name,content FROM kkaok WHERE rownum<=2  



힌트의 접근방법

힌트의 접근방법에는 여러 가지가 있다. 이중에 자주 사용되어지는 몇가지만 알아보겠다.

/*+ CLUSTER(table_name) */  

Cluster Scan을 선택하도록 지정한다. 따라서 clustered object들에만 적용된다.



/*+ INDEX(table_name index_name) */  

지정된 index사용하도록 지정한다.



/*+ INDEX_ASC(table_name index_name) */  

지정된 index를 오름차순으로 사용하도록 지정한다. Default로 Index Scan은 오름차순이다



/*+ INDEX_DESC(table_name index_name) */  

지정된 index를 내림차순으로 사용하도록 지정한다.



힌트를 사용한 성능향상 테스트

50000만 건을 입력하고 전체 카운터를 가져오는 테스트를 해보겠다.

여기서의 소요시간은 서버환경이나 측정하는 방법에 따라 달라 질 수 있다. 하지만 상대적으로 비교해 볼 수는 있는 것이니 어떤 효과가 있는지를 알기에는 충분하다고 생각한다.



1. select count(idx) idx from 테이블명

- 소요시간 : 203ms



2. select /*+ index(테이블명 인덱스명) */ count(idx) idx from 테이블명

- 소요시간 : 15ms



카운터는 집계함수이지만 hint를 사용하면 처리 속도가 훨씬 빠른 것을 볼 수 있다. 오라클이 최적의 경로로 처리할 거라고 너무 믿지 말자. 힌트를 사용하면 훨씬 나은 결과를 얻을 수 있는 것이다.



http://www.kkaok.pe.kr


///////////////////////////////////////////////////////////////////////////////////////////////////


만약 힌트를 여러개 걸고 싶다면?
select /*+ index(테이블명 인덱스명)  index(테이블명 인덱스명) */ count(idx) idx from 테이블

위와같은 형태로 하면 된다.