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.

Es ist ein Buch!
Du liest gerade einen Auschnitt aus dem Buch „SQL Performance Explained“. Warum bestellst du es nicht gleich?

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.

Recent Questions at Ask.Use-The-Index-Luke.com

0
votes
1
answer
229
views

query regd the CBO decision

Apr 17 at 10:27 Hulda(suspended)
index-choice optimizer
0
votes
3
answers
2.0k
views

Examples for Function Based Indexes?

Mar 25 at 15:52 Castorp 1
function-based
0
votes
1
answer
610
views

Updating multiple rows using a subquery in SQL

Jan 08 at 09:52 Jan 26
subquery update sql