Was ist der Unterschied zwischen UNION
y UNION ALL
?
Dies hat zur Folge, dass Union viel weniger leistungsfähig ist, da das Ergebnis auf Duplikate überprüft werden muss
Was ist der Unterschied zwischen UNION
y UNION ALL
?
UNION
entfernt doppelte Datensätze (bei denen alle Spalten in den Ergebnissen gleich sind), UNION ALL
nicht.
Es gibt einen Leistungseinbruch bei der Verwendung von UNION
anstelle von UNION ALL
Der Datenbankserver muss zusätzliche Arbeit leisten, um die doppelten Zeilen zu entfernen, aber in der Regel wollen Sie die Duplikate nicht haben (insbesondere bei der Entwicklung von Berichten).
Um Duplikate zu erkennen, müssen die Datensätze sowohl vergleichbare als auch kompatible Typen sein. Dies hängt vom jeweiligen SQL-System ab. Zum Beispiel kann das System alle langen Textfelder abschneiden, um kurze Textfelder für den Vergleich zu erzeugen (MS Jet), oder es kann sich weigern, binäre Felder zu vergleichen (ORACLE)
SELECT 'foo' AS bar UNION SELECT 'foo' AS bar
Ergebnis:
+-----+
| bar |
+-----+
| foo |
+-----+
1 row in set (0.00 sec)
SELECT 'foo' AS bar UNION ALL SELECT 'foo' AS bar
Ergebnis:
+-----+
| bar |
+-----+
| foo |
| foo |
+-----+
2 rows in set (0.00 sec)
Dies hat zur Folge, dass Union viel weniger leistungsfähig ist, da das Ergebnis auf Duplikate überprüft werden muss
Ich habe gerade bemerkt, dass es hier eine Menge guter Kommentare/Antworten gibt, also habe ich die Wiki-Flagge eingeschaltet und einen Hinweis auf die Leistung hinzugefügt...
UNION ALL kann in realen Fällen langsamer sein als UNION, wenn das Netz, z. B. das Internet, einen Engpass darstellt. Die Kosten für die Übertragung vieler doppelter Zeilen können den Vorteil der Abfrageausführungszeit übersteigen. Dies muss von Fall zu Fall analysiert werden.
Sowohl UNION als auch UNION ALL verketten das Ergebnis von zwei verschiedenen SQLs. Sie unterscheiden sich in der Art und Weise, wie sie mit Duplikaten umgehen.
UNION führt ein DISTINCT auf der Ergebnismenge durch, wobei alle doppelten Zeilen eliminiert werden.
UNION ALL entfernt keine Duplikate und ist daher schneller als UNION.
注 Bei der Verwendung dieser Befehle müssen alle ausgewählten Spalten vom gleichen Datentyp sein.
Beispiel: Wenn wir zwei Tabellen haben, 1) Mitarbeiter und 2) Kunde
UNION
entfernt Duplikate, während UNION ALL
nicht.
Um Duplikate zu entfernen, muss die Ergebnismenge sortiert werden, und dies かもしれません haben einen Einfluss auf die Leistung der UNION, abhängig von der Menge der zu sortierenden Daten und den Einstellungen verschiedener RDBMS-Parameter ( Für Oracle PGA_AGGREGATE_TARGET
con WORKAREA_SIZE_POLICY=AUTO
o SORT_AREA_SIZE
y SOR_AREA_RETAINED_SIZE
si WORKAREA_SIZE_POLICY=MANUAL
).
Grundsätzlich ist die Sortierung schneller, wenn sie im Speicher durchgeführt werden kann, aber es gilt derselbe Vorbehalt bezüglich des Datenvolumens.
Wenn Sie natürlich Daten ohne Duplikate benötigen, können Sie muss UNION verwenden, abhängig von der Quelle Ihrer Daten.
Ich hätte mich zum ersten Beitrag geäußert, um die Bemerkung "ist viel weniger leistungsfähig" zu relativieren, habe aber nicht genügend Ansehen (Punkte), um dies zu tun.
"Um Duplikate zu entfernen, muss die Ergebnismenge sortiert werden" - vielleicht haben Sie einen bestimmten Anbieter im Sinn, aber es gibt keine anbieterspezifischen Tags zu dieser Frage. Selbst wenn dies der Fall wäre, könnten Sie beweisen, dass Duplikate nicht ohne Sortierung entfernt werden können?
Distinct wird die Ergebnisse "implizit" sortieren, da das Entfernen von Duplikaten bei einer sortierten Menge schneller geht. Das bedeutet nicht, dass die zurückgegebene Ergebnismenge tatsächlich so sortiert ist, aber in den meisten Fällen wird distinct (und damit UNION) die Ergebnismenge intern sortieren.
Der grundlegende Unterschied zwischen UNION und UNION ALL besteht darin, dass die Union-Operation die doppelten Zeilen aus der Ergebnismenge eliminiert, während Union ALL alle Zeilen nach der Vereinigung zurückgibt.
von http://zengin.wordpress.com/2007/07/31/union-vs-union-all/
CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.
1 Stimmen
w3schools.com/sql/sql_union.asp
1 Stimmen
Union all enthält alle ids in der linken und rechten tabelle. wobei union eindeutige ids in der linken und rechten tabelle enthält. union all erlaubt doppelte ids. union funktioniert wie set in python und erzeugt eindeutige ids