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를 사용하면 처리 속도가 훨씬 빠른 것을 볼 수 있다. 오라클이 최적의 경로로 처리할 거라고 너무 믿지 말자. 힌트를 사용하면 훨씬 나은 결과를 얻을 수 있는 것이다.
HINT [ 힌트 ] 힌트란 사용자가 액세스 경로의 변경을 위해서 SQL내에 요구사항을 기술하면 옵티마이져가 액세스 경로를 결정할때 이를 참조하도록 하는 사용자 인터페이스를 말합니다. 옵티마이저에게 모든것을 맡기지 않고 사용자가 원하는 보다 좋은 액세스 경로를 직접 선택할 수 있도록 하므로 보다 쉽게 최적의 튜닝을 할 수 있게 도와 줍니다. ◈ 힌트의 사용 방법 /*+ */ : 여러 라인에 걸쳐 기술 할 때 사용합니다.
|
'DataBase > Oracle' 카테고리의 다른 글
oracle grouping (0) | 2008.09.23 |
---|---|
오라클 그룹함수 rollup,cube (0) | 2008.09.23 |
[튜닝] EXPLAIN PLAN 분석 (0) | 2008.08.05 |
오라클 예약어 (0) | 2008.06.20 |
* PL/SQL의 미리 정의된 예외 (0) | 2008.06.20 |