예~ 구문은 맞습니다.
알기 쉽게 예제를 보여드리지요.
select --+ index (e salary_indx)
name, salary
from emp e
where e.don = 1
and e.salary > 50000;
이렇게 할 경우 emp table에 만든 salary_indx 인덱스를 꼭 사용하라는 뜻입니다.
이것은 질의 방식을 옵티마이저에 일임하는게 아니라 직접 사용자가 정해주는 것이겠지요.
만일 하나의 인덱스가 있다면 그것을 사용할 것이며, 두개 이상의 인덱스가 있다면 cost 를 기준으로 리스트중 선택될 것입니다.
또, 인덱스 이름을 쓰지 않는다면 그 테이블에 있는 모든 인덱스가 고려될 것입니다. 시퀀셜 쿼리는 해당 테이블이 인덱스를 가지고 있지 않는 한 고려되지 않을 것입니다.
참고로 다른 예제도 가르쳐 드리면,
같은 명령에 avoid_index 를 쓰면 index 사용을 피하라는 것이고,
select --+ full(e)
name, salary
from emp e;
는 시퀀셜을 사용하라는 뜻이며,
select --+ avoid_full(e), index (e salary_index)
name, salary
from emp e
where e.dno = 1
and e.salary > 50000;
은 무슨 뜻인지 아시겟지요...^^;
혹 도움이 될 까 해서요...
p.s) 지금은 informix를 쓰고 있지 않아 많이 까먹었습니다. 혹시 틀린 대답
이 나오더라도 이해해 주십시요... 감솨!
-- 고재성 님이 쓰신 글:
>> 혹시 아시는 분 계십니까???
>>
>> 아래에 있는 글 보면...
>> select -- + index(...) field from table
>>
>> 이렇게 있는 것 같던데...
>>
>> 그럼.
|