/ / Führen Ansichten nur die Verknüpfungen aus, für die sie benötigt werden, oder alle Verknüpfungen immer? - Orakel, Ausblick, Verhalten

Führen Sichten nur die Joins durch, die sie benötigen, oder alle Joins immer? - Orakel, Ansicht, Verhalten

Ich bin in einer Oracle DB. Nehmen wir an, ich habe eine Ansicht, die sich an drei Tabellen anschließt. Die Ansicht hat jeweils zwei Felder. Jedes Feld benötigt nur Daten aus zwei der drei Tabellen.

Wenn ich die Ansicht abfrage und nur ein Feld zurückschicke, verbindet sich die Ansicht immer noch mit drei Tabellen oder nur mit den beiden Tabellen, die zum Berechnen des Felds erforderlich sind?

Antworten:

2 für die Antwort № 1

Im Allgemeinen muss es die drei Tische treffen. Erwägen

SELECT A.VAL, B.VAL, C.VAL FROM A JOIN B ON A.ID = B.ID JOIN C ON A.ID = C.ID

Es ist möglich, dass eine einzelne ID in "A" vorhanden istNull, 1 oder mehrere Übereinstimmungen in entweder B oder C. Wenn Tabelle "C" leer ist, würde die Ansicht niemals eine Zeile zurückgeben. Wenn Sie also nur A.VAL oder B.VAL abfragen, müsste immer noch nach einer gesucht werden entsprechende Zeile in "C".

Die Ausnahme ist, wenn, wegen einer erzwungenenreferenzielle Integritätsbedingung: Der Optimierer weiß, dass eine Zeile in "B" immer eine übergeordnete Zeile in "A" hat. In diesem Fall müsste eine Auswahl von B.VAL nicht wirklich die Existenz der übergeordneten Zeile in "A" überprüfen. Das zeigt sich daran Artikel


0 für die Antwort № 2

Dies hängt wahrscheinlich von der Art des verwendeten Joins ab. Wenn es sich um innere Verbindungen handelt, müssen auf jeden Fall alle drei Tabellen untersucht werden.


0 für die Antwort № 3

Im Allgemeinen fügt das Datenbankmodul alle drei Tabellen zusammen, um sicherzustellen, dass es die richtige Antwort hat.

Oracle entfernt manchmal eine der Tabellen, bei denen das Ergebnis nicht geändert wird.

Dies ist möglich, wenn: -

  • Es gibt eine Fremdschlüsseleinschränkung für die zu entfernende Tabelle (d. H. Eine Zeile in der Tabelle) kann garantiert gefunden werden)

  • Die Tabelle wird sonst nicht verwendet. d. h. nicht ausgewählt aus, in der where-Klausel usw.