1706 Stimmen

Was ist der Unterschied zwischen UNION und UNION ALL?

Was ist der Unterschied zwischen UNION y UNION ALL ?

1 Stimmen

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

2038voto

Jim Harte Punkte 2573

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)

UNION Beispiel:

SELECT 'foo' AS bar UNION SELECT 'foo' AS bar

Ergebnis:

+-----+
| bar |
+-----+
| foo |
+-----+
1 row in set (0.00 sec)

Beispiel UNION ALL:

SELECT 'foo' AS bar UNION ALL SELECT 'foo' AS bar

Ergebnis:

+-----+
| bar |
+-----+
| foo |
| foo |
+-----+
2 rows in set (0.00 sec)

218 Stimmen

Dies hat zur Folge, dass Union viel weniger leistungsfähig ist, da das Ergebnis auf Duplikate überprüft werden muss

9 Stimmen

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

306 Stimmen

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.

318voto

Bhaumik Patel Punkte 14337

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

  1. Daten der Mitarbeitertabelle:

enter image description here

  1. Daten der Kundentabelle:

enter image description here

  1. UNION-Beispiel (Es werden alle doppelten Datensätze entfernt):

enter image description here

  1. UNION ALL Beispiel (Es werden nur Datensätze verkettet, keine Duplikate eliminiert, daher ist es schneller als UNION):

enter image description here

4 Stimmen

"alle ausgewählten Spalten müssen vom gleichen Datentyp sein" - in Wirklichkeit sind die Dinge nicht so streng (was aus Sicht eines relationalen Modells nicht gut ist!). Der SQL-Standard sagt, dass die jeweiligen Spaltendeskriptor müssen bis auf den Namen identisch sein.

59voto

mathewbutler Punkte 959

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.

2 Stimmen

"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?

6 Stimmen

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.

35voto

Michiel Overeem Punkte 3704

In ORACLE: UNION unterstützt keine BLOB (oder CLOB) Spaltentypen, UNION ALL hingegen schon.

1 Stimmen

Das Gleiche gilt in MS SQL mit nicht vergleichbaren Spaltentypen, wie XML

33voto

George Mauer Punkte 109944

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/

1 Stimmen

Leider scheint der verlinkte wordpress.com-Artikel nicht mehr verfügbar zu sein. Huch! Diese Seite kann nicht gefunden werden Haben Sie zufällig eine alternative URL, George?

CodeJaeger.com

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.

Powered by:

X