Teradata - JOIN Index
JOIN INDEX ist eine materialisierte Ansicht. Die Definition wird dauerhaft gespeichert und die Daten werden immer dann aktualisiert, wenn die im Join-Index angegebenen Basistabellen aktualisiert werden. JOIN INDEX kann eine oder mehrere Tabellen enthalten und auch voraggregierte Daten enthalten. Join-Indizes werden hauptsächlich zur Verbesserung der Leistung verwendet.
Es stehen verschiedene Arten von Join-Indizes zur Verfügung.
- Single Table Join Index (STJI)
- Multi Table Join Index (MTJI)
- Aggregierter Join-Index (AJI)
Single Table Join Index
Mit dem Join-Index für einzelne Tabellen kann eine große Tabelle basierend auf den anderen primären Indexspalten als der aus der Basistabelle partitioniert werden.
Syntax
Es folgt die Syntax eines JOIN INDEX.
CREATE JOIN INDEX <index name>
AS
<SELECT Query>
<Index Definition>;
Beispiel
Betrachten Sie die folgenden Mitarbeiter- und Gehaltstabellen.
CREATE SET TABLE EMPLOYEE,FALLBACK (
EmployeeNo INTEGER,
FirstName VARCHAR(30) ,
LastName VARCHAR(30) ,
DOB DATE FORMAT 'YYYY-MM-DD',
JoinedDate DATE FORMAT 'YYYY-MM-DD',
DepartmentNo BYTEINT
)
UNIQUE PRIMARY INDEX ( EmployeeNo );
CREATE SET TABLE SALARY,FALLBACK (
EmployeeNo INTEGER,
Gross INTEGER,
Deduction INTEGER,
NetPay INTEGER
)
PRIMARY INDEX ( EmployeeNo )
UNIQUE INDEX (EmployeeNo);
Das folgende Beispiel erstellt einen Join-Index mit dem Namen Employee_JI für die Employee-Tabelle.
CREATE JOIN INDEX Employee_JI
AS
SELECT EmployeeNo,FirstName,LastName,
BirthDate,JoinedDate,DepartmentNo
FROM Employee
PRIMARY INDEX(FirstName);
Wenn der Benutzer eine Abfrage mit einer WHERE-Klausel für EmployeeNo sendet, fragt das System die Employee-Tabelle unter Verwendung des eindeutigen Primärindex ab. Wenn der Benutzer die Mitarbeitertabelle mit Employee_Name abfragt, kann das System mit Employee_Name auf den Join-Index Employee_JI zugreifen. Die Zeilen des Join-Index werden in der Spalte employee_name gehasht. Wenn der Verknüpfungsindex nicht definiert ist und der Mitarbeitername nicht als Sekundärindex definiert ist, führt das System einen vollständigen Tabellenscan durch, um auf die Zeilen zuzugreifen, was zeitaufwändig ist.
Sie können den folgenden EXPLAIN-Plan ausführen und den Optimierungsplan überprüfen. Im folgenden Beispiel sehen Sie, dass das Optimierungsprogramm den Join-Index anstelle der Employee-Basistabelle verwendet, wenn die Tabelle die Spalte Employee_Name abfragt.
EXPLAIN SELECT * FROM EMPLOYEE WHERE FirstName='Mike';
*** Help information returned. 8 rows.
*** Total elapsed time was 1 second.
Explanation
------------------------------------------------------------------------
1) First, we do a single-AMP RETRIEVE step from EMPLOYEE_JI by
way of the primary index "EMPLOYEE_JI.FirstName = 'Mike'"
with no residual conditions into Spool 1 (one-amp), which is built
locally on that AMP. The size of Spool 1 is estimated with low
confidence to be 2 rows (232 bytes). The estimated time for this
step is 0.02 seconds.
→ The contents of Spool 1 are sent back to the user as the result of
statement 1. The total estimated time is 0.02 seconds.
Multi Table Join Index
Ein Multi-Table-Join-Index wird erstellt, indem mehr als eine Tabelle verbunden wird. Der Multi-Table-Join-Index kann zum Speichern der Ergebnismenge häufig verknüpfter Tabellen verwendet werden, um die Leistung zu verbessern.
Beispiel
Im folgenden Beispiel wird ein JOIN INDEX mit dem Namen Employee_Salary_JI erstellt, indem die Tabellen Employee und Salary verknüpft werden.
CREATE JOIN INDEX Employee_Salary_JI
AS
SELECT a.EmployeeNo,a.FirstName,a.LastName,
a.BirthDate,a.JoinedDate,a.DepartmentNo,b.Gross,b.Deduction,b.NetPay
FROM Employee a
INNER JOIN Salary b
ON(a.EmployeeNo = b.EmployeeNo)
PRIMARY INDEX(FirstName);
Immer wenn die Basistabellen Employee oder Salary aktualisiert werden, wird auch der Join-Index Employee_Salary_JI automatisch aktualisiert. Wenn Sie eine Abfrage ausführen, die Mitarbeiter- und Gehaltstabellen verbindet, kann der Optimierer entscheiden, direkt auf die Daten von Employee_Salary_JI zuzugreifen, anstatt die Tabellen zu verbinden. Der EXPLAIN-Plan für die Abfrage kann verwendet werden, um zu überprüfen, ob das Optimierungsprogramm die Basistabelle oder den Join-Index auswählt.
Aggregierter Join-Index
Wenn eine Tabelle in bestimmten Spalten konsistent aggregiert wird, kann der aggregierte Verknüpfungsindex für die Tabelle definiert werden, um die Leistung zu verbessern. Eine Einschränkung des aggregierten Join-Index besteht darin, dass er nur SUM- und COUNT-Funktionen unterstützt.
Beispiel
Im folgenden Beispiel werden Mitarbeiter und Gehalt zusammengeführt, um das Gesamtgehalt pro Abteilung zu ermitteln.
CREATE JOIN INDEX Employee_Salary_JI
AS
SELECT a.DepartmentNo,SUM(b.NetPay) AS TotalPay
FROM Employee a
INNER JOIN Salary b
ON(a.EmployeeNo = b.EmployeeNo)
GROUP BY a.DepartmentNo
Primary Index(DepartmentNo);