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
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;
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%Tags und Links sql oracle query-performance hints