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를 사용하면 처리 속도가 훨씬 빠른 것을 볼 수 있다. 오라클이 최적의 경로로 처리할 거라고 너무 믿지 말자. 힌트를 사용하면 훨씬 나은 결과를 얻을 수 있는 것이다.
'ORACLE > SQL' 카테고리의 다른 글
PL/SQL (19) - Collections (중첩테이블 - Nested Table) (0) | 2008.02.21 |
---|---|
<25가지 SQL작성법> (0) | 2008.02.19 |
Materialized View 설명 (0) | 2008.02.14 |
유용한 오라클 명령어 (0) | 2008.01.28 |
유용한 DB 쿼리 (0) | 2007.11.17 |