26. November 2007

MySQL: UNION ALL deutlich schneller als UNION

Hierbei nimmt der Zeitgewinn mit wachsender Größe des Ergebnis-Sets zu.

Der Grund ist, dass ein

SELECT UNION

tatsächlich einem

SELECT UNION DISTINCT

entspricht. Dies bedeutet, dass MySQL sicherstellt, dass jede Ergebniszeile nur einmal in der Ergebnismenge vorhanden ist. Für diese Überprüfung wird in einer temporären Ergebnistabelle ein Key erstellt, der den Hash-Wert der jweiligen Ergebniszeile darstellt. Es wird dann dafür gesorgt, dass diese Hash-Werte unique sind. Die Berechnung der Hash-Werte kostet natürlich entsprechend Rechenzeit.

Demnach ist es performanter explizit ein

UNION ALL

auszuführen, wenn man nicht auf die Einzigartigkeit der Datensätze im Ergebnis angewiesen ist, oder auf Grund der Datenstruktur so oder so keine Ergebniszeilen doppelt vorkommen können.

Noch keine Kommentare!

Schreibe einen Kommentar

Achtung: Kommentare, die lediglich Werbezwecken dienen und keinen sinnvollen Bezug in angemessenem Umfang zum Artikel aufweisen (z.Bsp. sinnleere Einzeiler mit Link zu anderen Webseiten), werden mit 500 Euro pro Kommentar und angefangenem Monat in Rechnung gestellt.

Folgende Tags sind erlaubt: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>