Ein Join ist eine SQL-Anweisung, die mehrere Tabellen miteinander verknüpft und als Ergebnis eine Join-Tabelle liefert.
Siehe auch:
SQL-Tutorial, Joins: Informationen
aus mehreren Tabellen
SQL-Referenzhandbuch, JOIN-Prädikat (join_predicate)
Aufgabe des SQL-Optimierers ist es, die optimale Reihenfolge bei der Abarbeitung der Tabellen zu finden. Der SQL-Optimierer versucht, auf die Zeilen der zu verknüpfenden neuen Tabellen möglichst direkt zuzugreifen und die Zwischenergebnistabellen möglichst klein zu halten. Er beginnt die Abarbeitung von Joins deswegen mit den kleinsten Tabellen mit den restriktivsten Suchbedingungen, um zunächst kleine Zwischenergebnistabellen zu erhalten.
Die Reihenfolge, in der die Tabellen in der FROM-Klausel der SELECT-Anweisung spezifiziert sind, hat keinen Einfluss auf die Reihenfolge ihrer Abarbeitung.
Der SQL-Optimierer kann eine der folgenden Suchstrategien wählen, 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
Wenn die Spaltenlängen der in einem Join-Schritt jeweils zu vergleichenden beiden Spalten nicht gleich sind, dann kann der SQL-Optimierer die oben aufgeführten Suchstrategien nicht anwenden. Um diese Einschränkung zu umgehen, definieren Sie deshalb für alle Spalten, die über einen Join verbunden werden sollen, denselben Wertebereich (Domäne).
Die bei den Erläuterungen zum SQL-Optimierer verwendeten Beispiele stützen sich auf die Demo-Datenbank DEMODB und ihre vollständigen Demo-Daten im Schema HOTEL.
Konzepte des Datenbanksystems, Objekte im Schema HOTEL
SELECT customer.cno, customer.title,
customer.name,
customer.zip, city.name, city.state,
customer.address
FROM hotel.customer, hotel.city
WHERE customer.zip = city.zip
Join-Tabellen:
CUSTOMER und
CITY
Qualifikation: customer.zip =
city.zip
genutzte Suchstrategie für
CITY: TABLE SCAN
genutzte Suchstrategie für
CUSTOMER: JOIN VIA KEY
RANGE
Ergebnis der EXPLAIN-Anweisung
TABLENAME |
COLUMN_OR_INDEX |
STRATEGY |
PAGECOUNT |
CITY |
|
TABLE SCAN |
1 |
CUSTOMER |
|
JOIN VIA KEY RANGE |
1 |
|
|
TABLE TEMPORARY SORTED |
|
|
ZIP |
(USED SORT COLUMN) |
|
|
|
RESULT IS COPIED |
|
Die Join-Abarbeitung beginnt mit dem Zugriff auf die Tabelle CITY. Diese wird mit der Suchstrategie TABLE SCAN abgearbeitet.
Für den Join-Übergang auf die Tabelle CUSTOMER mit der Strategie JOIN VIA KEY RANGE wird die Spalte ZIP genutzt.
Beim Join wird immer eine Ergebnismenge aufgebaut (RESULT IS COPIED).
Siehe auch:
Datenbankparameter JOIN_SEARCH_LEVEL
SQL-Referenzhandbuch, Domänenname (domain_name)