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.

War es hilfreich?

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

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top