Die Join-Operation


An SQL query walks into a bar and sees two tables.
He walks up to them and asks ’Can I join you?’

— Quelle: Unbekannt

Eine Join-Operation transformiert Daten aus einem normalisierten Modell in eine denormalisierte Form, die für eine bestimmte Aufgabe benötigt wird. Da sie verstreute Daten-Fragmente zusammenführt, ist die Ge­schwin­dig­keit einer Join-Operation besonders empfindlich auf Fest­plat­ten-Latenzen. Auch hier ist eine sorgfältige Indizierung die beste Methode, die Antwortzeiten zu verbessern. Bei einem Join hängt die richtige Indizie­rung allerdings davon ab, welcher der drei gängigen Algorithmen zur Anwen­dung kommt.

Bei unseren Schlulungs-, Tuning-, und
Literaturangeboten ist für jeden was dabei

Eines gilt aber für alle Join-Algorithmen gleichermaßen: Sie verarbeiten jeweils nur zwei Tabellen auf einmal. Ein SQL-Join mit mehreren Tabellen wird schrittweise ausgeführt: Zuerst werden zwei Tabellen zusammen­gefügt, dann das Zwischenergebnis mit der nächsten. Und so weiter.

Zwischenergebnisse „am Fließband“

Obwohl man sich den Algorithmus mit einem Zwischenergebnis sehr gut vorstellen kann, heißt das nicht, dass die Datenbank das Zwischenergebnis materialisieren muss. Das würde bedeuten, die erste Join-Operation vollständig auszuführen und das Zwischen­er­gebnis im Speicher abzulegen. Stattdessen wird eine Join-Operation möglichst „am Fließband“ ausgeführt (pipelined execution), um den Speicherbedarf zu reduzieren. Dabei wird jede Zeile des Zwi­schen­ergebnisses wie am Fließband direkt zur nächsten Operation weitergeleitet.

Obwohl die Reihenfolge der einzelnen Join-Operationen dabei keinen Einfluss auf das Endergebnis hat, wirkt sie sich dennoch auf die Per­for­mance aus. Der Optimizer bewertet daher alle Varianten mit einem Cost-Wert und wählt letztendlich die beste Reihenfolge aus. Das bedeutet aber, dass das Optimieren einer komplexen Abfrage selbst zum Performance-Problem werden kann. Je mehr Join-Operationen vorkommen, desto mehr Ausführungsplan-Varianten muss der Optimizer bewerten – mathematisch ausgedrückt: n! (Fakultät). Wenn man Bind-Parameter verwendet, ist das allerdings kein Problem.

Wichtig

Je komplexer eine SQL-Anweisung wird, desto wichtiger sind Bind-Parameter.

Keine Bind-Parameter zu verwenden, ist, als würde man ein Programm jedes Mal neu kompilieren.

Wenn dir gefällt, wie ich die Dinge erkläre, wirst du meine Kurse lieben.

Über den Autor

Photo of Markus Winand
Markus Winand stimmt Entwickler auf SQL-Performance ein. Er hat das Buch SQL Performance Explained veröffentlicht und bietet inhouse Schulungen sowie Tuning-Leistungen auf http://winand.at/ an.