관리 메뉴

nkdk의 세상

oracle에서 hint의 사용 본문

My Programing/DataBase

oracle에서 hint의 사용

nkdk 2008. 6. 27. 14:14
oracle에서 hint의 사용
 
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를 사용하면 처리 속도가 훨씬 빠른 것을 볼 수 있다. 오라클이 최적의 경로로 처리할 거라고 너무 믿지 말자. 힌트를 사용하면 훨씬 나은 결과를 얻을 수 있는 것이다.