Um zu verstehen, wie der Optimierer Suchstrategien für Joins findet, sind einige Informationen darüber notwendig, wie das Datenbanksystem Joins abarbeitet.
Joins sind Verbundanweisungen, die Tabellen miteinander verbinden. Dabei werden die einzelnen Tabellen schrittweise verknüpft:
...
1. Die erste Tabelle wird durchsucht.
2. Das Ergebnis wird in einer Zwischenergebnistabelle gespeichert.
3. Die Zwischenergebnistabelle wird nach den Join-Spalten des folgenden Join-Schritts sortiert.
4. Die nächste noch vorhandene Tabelle wird durchsucht.
5. Die bestehende Zwischenergebnistabelle wird mit der neuen Tabelle verknüpft.
6. Das Ergebnis wird in einer neuen Zwischenergebnistabelle gespeichert.
7. Diese Zwischenergebnistabelle wird nach den Join-Spalten des folgenden Join-Schritts sortiert.
8. Die alte Zwischenergebnistabelle wird gelöscht.
9. Gibt es weitere Tabellen, wird die Vorgehensweise ab Schritt 4 wiederholt.
Die letzte Zwischenergebnistabelle ist die vom Benutzer gewünschte Ergebnistabelle.
Bei der Optimierung sollen Zeit und Speicherplatz eingespart werden. Für Joins bedeutet das, dass auf die Zeilen der zu verknüpfenden neuen Tabellen möglichst direkt zugegriffen werden kann und die Zwischenergebnistabellen möglichst klein sind.
Der Optimierer beginnt die Abarbeitung von Joins deswegen mit den kleinsten Tabellen mit den restriktivsten Suchbedingungen, um zunächst kleine Zwischenergebnistabellen zu erhalten. Der Optimierer legt die Reihenfolge der Abarbeitung also selbst fest; die Reihenfolge, in der die Tabellen in der FROM-Klausel der SELECT-Anweisung spezifiziert sind, hat hierauf keinen Einfluss.
Die folgenden Suchstrategien sind möglich, um ausgehend von den Join-Spaltenwerten der alten Zwischenergebnistabelle auf Zeilen der neuen Tabelle zuzugreifen:
JOIN VIA MULTIPLE INDEXED COLUMNS
JOIN VIA RANGE OF MULTIPLE INDEXED COL.
JOIN VIA RANGE OF MULTIPLE KEY COLUMNS
Sind die Spaltenlängen der in einem Join-Schritt jeweils zu vergleichenden beiden Spalten nicht gleich, dann können nicht alle Suchstrategien angewendet werden. Um diese Einschränkung zu umgehen, sollten Sie deshalb für Spalten, die über einen Join verbunden werden sollen, denselben Wertebereich definieren.
Mit der EXPLAIN-Anweisung (EXPLAIN-Anweisung für Joins) können Sie herausfinden, welche Suchstrategie der Optimierer anwendet.