Wie Oracle gezwungen wird, keinen Index zu verwenden

8

Ich habe eine Anforderung, in der ich die SQL zwingen muss, keinen bestimmten Index zu verwenden, der in einer Tabelle existiert.

zum Beispiel

%Vor%

Ich kann den Index id1 nicht löschen und lasse ihn auch nicht fallen, da ich keine Rechte dafür habe. deshalb möchte ich eine Art Hinweis hinzufügen, um es zu vermeiden.

Gibt es einen solchen Hinweis oder gibt es eine Problemumgehung dafür?

Vielen Dank im Voraus

    
Vineet Verma 17.06.2013, 06:34
quelle

3 Antworten

8

Verwenden Sie den NO_INDEX-Hinweis

Ссылка

zum Beispiel

%Vor%     
Dmitry Bychenko 17.06.2013, 06:45
quelle
3

Sie können die Verwendung eines Indexes für eine Spalte ohne Hinweise verhindern, indem Sie eine Funktion darauf anwenden. Sie sollten eine "no-op" -Funktion verwenden, damit die Spaltenwerte nicht geändert werden. Für Zahlen könnte das Hinzufügen von Null für Strings sein, die den leeren String anhängen:

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

    
Chris Saxon 17.06.2013 14:56
quelle
2

Es gibt einen allgemeinen Grundsatz, dass Sie für jede Abfrage, für die Sie den Ausführungsplan angeben möchten, etwa zwei oder drei Hinweise pro Tabelle benötigen.

In diesem Fall suchen Sie wahrscheinlich nach einem Hash-Join, der aus zwei vollständigen Table-Scans resultiert, was ziemlich einfach ist, so dass der Hinweisblock etwa wie folgt aussehen würde:

%Vor%     
David Aldridge 17.06.2013 10:10
quelle