source

오라클에서 인덱스를 사용하지 않도록 강제하는 방법

lovecheck 2023. 9. 19. 21:14
반응형

오라클에서 인덱스를 사용하지 않도록 강제하는 방법

sql이 테이블에 존재하는 특정 인덱스를 사용하지 않도록 강제해야 하는 요구사항이 있습니다.

예를들면,

create table t1(id varhcar2(10),data1 varchar2(3000));
create table t2(id varhcar2(10),data2 varchar2(3000));

create index id1 on t1(id);

select * from t1,t2 where t1.id=t2.id;

인덱스 id1에 대한 권한이 없기 때문에 인덱스 id1을 삭제할 수도 없고 삭제할 수도 없습니다. 따라서 사용을 피하기 위해 힌트를 추가하고 싶습니다.

그런 힌트가 있나요, 아니면 이에 대한 해결책이 있나요.

미리 감사드립니다.

NO_INDEX 힌트를 사용해 보십시오.

예를 들어.

SELECT /*+ NO_INDEX(t1 id1) */ 
  FROM t1,
       t2  
 WHERE t1.id = t2.id;

실행 계획을 지정하려는 모든 쿼리에 대해 테이블당 2~3개 정도의 힌트가 필요하다는 일반적인 원칙이 있습니다.

이 경우 두 번의 전체 테이블 검색을 통해 생성된 해시 조인을 찾고 있을 수 있습니다. 이는 상당히 간단하기 때문에 힌트 블록은 다음과 같습니다.

select /*+ full(t1) full(t2) use_hash(t1 t2) */
...

함수를 적용하여 힌트 없이 열에 인덱스를 사용하는 것을 방지할 수 있습니다.열 값이 변경되지 않도록 "No-op" 함수를 사용할 수 있습니다.숫자에 대해서는 0을 추가하고, 빈 문자열을 추가하는 문자열에 대해서는 0을 추가할 수 있습니다.

select * from t1,t2 where t1.id || '' =t2.id;

언급URL : https://stackoverflow.com/questions/17141630/how-to-force-oracle-to-not-to-use-an-index

반응형