Mengenoperationen des Ausführungsplans (Oracle)

UNION-ALL

Die Mengenoperation Vereinigung wird durch die Operation UNION-ALL im Ausführungsplan dargestellt. In einer SQL-Abfrage wird sie als UNION oder UNION ALL bezeichnet. Die Ausführung eines FULL OUTER JOINs in einer SQL-Abfrage kann auch dazu führen, dass sich der ORACLE-Optimizer für den Einsatz der Operation UNION-ALL entscheidet.

Der Operand UNION ALL liefert alle Werte, die von der linken und von der rechten Abfrage zurückgegeben werden, gleichgültig, ob Duplikate vorhanden sind oder nicht. Wenn die Duplikate nicht mitangezeigt werden sollen, ist die Anwendung von einem Algorithmus wie Hash Distinct oder Ordered Distinct erforderlich, um die von UNION ALL generierte Duplikate wieder zu entfernen. Oder man kann den Operand UNION ALL in der SQL-Abfrage durch UNION ersetzen, der die doppelten Datensätze und NULL-Werte schon von vorne an entfernt.

Der Operand UNION führt zu einer sehr aufwendigen Operation und verursacht beim Weglassen der ALL-Klausel Sortierungsvorgänge (SORT UNIQUE-Operation) für die einzelnen Untermengen, weil die Option DISTINCT im UNION impliziert ist. UNION ALL ist kostengünstiger als UNION.


INTERSECTION

Die Mengenoperation Durchschnitt wird durch die Operation INTERSECTION im Ausführungsplan dargestellt. In der SQL-Abfrage wird sie als INTERSECT bezeichnet. Diese Operation liefert alle unterschiedlichen Werte, die sowohl von der linken als auch von der rechten Abfrage des INTERSECT-Operanden zurückgegeben werden.

Alle Mengenoperationen sind sehr systembelastende Operationen und haben hohe Kosten, deswegen sollen sie vermieden werden.

Die Operation INTERSECTION ist kommutativ, d.h. die linken und rechten SQL-Abfragen dürfen vertauscht werden, ohne dass sich das Ergebnis ändert.

Alle Mengenoperationen, darunter auch die INTERSECTION-Operation, müssen vorher sortiert werden. Sie benötigen Sortieroperationen, bevor sie ihre Ergebnisse liefern.

Die INTERSECTION-Operation kann durch eine geschachtelte SELECT-Anweisung mit IN- oder EXISTS-Bedingung nachgebildet werden, z.B.:

 SELECT * FROM Angestellte WHERE Nachname IN (SELECT Nachname FROM Kunden);

MINUS

Die Mengenoperation Differenz wird durch die Operation MINUS im Ausführungsplan dargestellt und sie wird in der SQL-Abfrage auch als MINUS bezeichnet. Diese Operation liefert alle unterschiedlichen Werte von der linken Abfrage des MINUS-Operanden, die aber nicht in der rechten Abfrage enthalten sind.

Alle Mengenoperationen sind sehr systembelastenden Operationen und haben hohe Kosten, deswegen sollen sie vermieden werden.

Die MINUS-Operation kann durch eine geschachtelte SELECT-Anweisung mit NOT IN- oder NOT EXISTS-Bedingung nachgebildet werden, z.B.:

 SELECT * FROM Angestellte WHERE Nachname NOT IN (SELECT Nachname FROM Kunden);

Siehe auch: Ausfuehrungsplanoperationen?, SQL-Tuning?, Optimizer, Ausführungsplan einer SQL-Abfrage, Statistiken, Hints, Werkzeuge zum SQL-Tuning

Quellen:

Kategorie: Tuning, M