J'ai une exigence dans laquelle je dois forcer le SQL ne pas utiliser un index particulier qui existe sur une table.
Par exemple, P>
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;
3 Réponses :
Utilisez no_index indice
http: // docs.oracle.com/cd/b19306_01/server.102/b14200/sql_elements006.htm#babhjbib p>
par exemple p>
Il existe un principe général que, pour chaque requête pour laquelle vous souhaitez spécifier le plan d'exécution, vous avez besoin de quelque chose comme deux ou trois notes par table.
Dans ce cas, vous recherchez probablement une joint de hachage résultant de Deux balayages de table complète, qui est assez simple, le bloc d'indice serait donc quelque chose comme: p>
Vous pouvez empêcher l'utilisation d'un index sur une colonne sans indice en appliquant une fonction. Vous voudrez utiliser une fonction "no-op" afin que les valeurs de colonne ne soient pas modifiées. Pour les chiffres, cela pourrait ajouter zéro, pour les chaînes Ajoutez la chaîne vide: p>
Sélectionnez * à partir de T1, T2 où T1.Id || '' = t2.Id; code> p>