Ich habe zwei Abfragen, bei denen ich UNION
bin, so dass ich bereits weiß, dass zwischen den beiden Abfragen keine doppelten Elemente vorhanden sein werden. Daher werden UNION
und UNION ALL
die gleichen Ergebnisse liefern.
Welchen sollte ich verwenden?
Sie sollten diejenige verwenden, die der Absicht entspricht, nach der Sie suchen. Wenn Sie sicherstellen möchten, dass keine Duplikate vorhanden sind, verwenden Sie UNION
, andernfalls verwenden Sie UNION ALL
. Nur weil Ihre Daten die gleichen Ergebnisse liefern, gerade jetzt bedeutet nicht, dass es immer so sein wird.
Das heißt, UNION ALL
wird bei jeder vernünftigen Datenbankimplementierung schneller sein, siehe die Artikel unten für Beispiele. In der Regel sind sie jedoch identisch, mit dem Unterschied, dass UNION
einen zusätzlichen Schritt zum Entfernen identischer Zeilen durchführt (wie zu erwarten ist) und möglicherweise dazu neigt, die Ausführungszeit zu dominieren.
Ich sehe, dass Sie diese Frage mit PERFORMANCE versehen haben, also nehme ich an, dass das Ihre primäre Überlegung ist.
UNION ALL
wird UNION
absolut übertreffen, da SQL die zwei Mengen für die Duplikate nicht überprüfen muss.
Verwenden Sie immer UNION ALL
. Wenn Sie nicht SQL benötigen, um die Duplikatsprüfung für Sie durchzuführen, verwenden Sie immer %code% .
Ich würde sowieso UNION ALL
verwenden. Auch wenn Sie wissen, dass es je nach Datenbankserver-Engine keine Duplikate geben wird, weiß es das möglicherweise nicht.
Um dem Datenbankserver zusätzliche Informationen zur Verfügung zu stellen, verwenden Sie UNION ALL
.
Wenn der Abfrageplaner Ihres DB-Servers schlau genug ist, diese Informationen aus der UNION
-Klausel und den Tabellenindizes abzuleiten, dann sollten die Ergebnisse (performance- und semantisch) die sein gleich.
In beiden Fällen hängt es stark von dem DB-Server ab, den Sie verwenden.
Da es keine Duplikate von den beiden geben wird, verwenden Sie UNION ALL. Sie müssen nicht nach Duplikaten suchen, und UNION ALL wird die Aufgabe effizienter gestalten.
Tags und Links sql performance union-all