2013-06-17 13 views
8

Ho un requisito in cui devo forzare lo sql a non utilizzare un particolare indice che esiste su una tabella.Come forzare oracle a non utilizzare un indice

per esempio,

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; 

Non posso cadere l'ID1 indice e non rilasciarlo come io non sono diritti su di esso. quindi voglio aggiungere qualche suggerimento per evitare di usarlo ..

C'è qualche suggerimento, o c'è qualche soluzione per questo.

Grazie in anticipo

risposta

2

C'è un principio generale che per ogni query per il quale si desidera specificare il piano di esecuzione, hai bisogno di qualcosa come due o tre suggerimenti per tavolo.

In questo caso, probabilmente siete alla ricerca di un hash join risultante da due scansioni di tabella completo, che è abbastanza semplice in modo che il blocco suggerimento sarebbe qualcosa di simile:

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

È possibile impedire l'uso di un indice su una colonna senza suggerimenti applicandogli una funzione. Ti consigliamo di utilizzare una funzione "no-op" in modo che i valori della colonna non vengano modificati. Per i numeri potrebbe aggiungere zero, per le stringhe che aggiungono la stringa vuota:

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

Problemi correlati