Wie kann ich Oracle Indizes erhalten, wenn meine Ansicht, die eine UNION ALL enthält?
Frage
VIEW1 IS:
SELECT A, B, C FROM view2
UNION ALL
SELECT A, B, C FROM view3
INNER JOIN TBL5 ON view3.CODE = TBL5.CODE
Spalte C wird in den Quellentabellen indexiert, und wenn ich ausführen eine der select-Anweisungen einzeln verwendet es den Index und kommt zurück in einem Blitz. Wenn ich die Ansicht es mal aus. Ich hatte den Eindruck, dass Oracle rewrote Abfragen für Ansichten und gebrauchten Indizes wo sinnvoll, anstatt eine SELECT * FROM VIEW1
tun und dann die Prädikate nach der Tat der Anwendung.
Was mache ich falsch? Die Probe Ansichten über belichten das Problem, aber meine wirklichen Ansichten, die jeweils verbinden Dutzende von Tabellen so eine Ansicht, wirklich notwendig ist.
Lösung
Der Optimierer nicht weiß, was der Wert von CODE vor der Zeit sein wird, wenn es den Ausführungsplan erstellt, weil Sie für die Sicht gehen. Wenn Sie in 11g Sie den PUSH_PRED Optimierungshinweis verwenden können, damit es funktioniert wie erwartet.
Andere Tipps
Sie können eine HINT versuchen. oder stellen Sie sicher, die Tabellen analysiert.
ein anderer Gedanke - vielleicht macht eine Meterialized Ansicht