Zur Vereinigung oder Vereinigung alle, das ist die Frage

8

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?

    
Billy ONeal 11.10.2010, 20:09
quelle

5 Antworten

23

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.

Daniel DiPaolo 11.10.2010, 20:12
quelle
6

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% .

    
BradC 11.10.2010 20:15
quelle
2

Nach Ссылка zumindest für die Leistung ist es besser, UNION ALL zu verwenden, da es Duplikate nicht aktiv unterscheidet und als solches schneller

ist     
Semyazas 11.10.2010 20:13
quelle
1

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.

    
Pablo Santa Cruz 11.10.2010 20:13
quelle
1

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.

    
Mark Mayfield 11.10.2010 20:32
quelle

Tags und Links