Teradata - JOIN Index

JOIN INDEX, somutlaştırılmış bir görünümdür. Tanımı kalıcı olarak saklanır ve birleştirme indeksinde belirtilen temel tablolar her güncellendiğinde veriler güncellenir. JOIN INDEX, bir veya daha fazla tablo içerebilir ve ayrıca önceden toplanmış veriler içerebilir. Birleştirme dizinleri esas olarak performansı artırmak için kullanılır.

Farklı tipte birleştirme indeksleri mevcuttur.

  • Tek Tablo Birleştirme Dizini (STJI)
  • Çoklu Masa Birleştirme Endeksi (MTJI)
  • Toplu Katılım Dizini (AJI)

Tek Tablo Birleştirme Dizini

Tek Tablo Birleştirme indeksi, büyük bir tabloyu temel tablodakinden farklı birincil indeks sütunlarına göre bölümlemeye izin verir.

Sözdizimi

JOIN INDEX'in sözdizimi aşağıdadır.

CREATE JOIN INDEX <index name> 
AS 
<SELECT Query> 
<Index Definition>;

Misal

Aşağıdaki Çalışan ve Maaş tablolarını düşünün.

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);

Aşağıda, Employee tablosunda Employee_JI adlı bir Join indeksi oluşturan bir örnek verilmiştir.

CREATE JOIN INDEX Employee_JI 
AS 
SELECT EmployeeNo,FirstName,LastName, 
BirthDate,JoinedDate,DepartmentNo 
FROM Employee 
PRIMARY INDEX(FirstName);

Kullanıcı EmployeeNo üzerinde bir WHERE yan tümcesi içeren bir sorgu gönderirse, sistem, benzersiz birincil dizini kullanarak Çalışan tablosunu sorgulayacaktır. Kullanıcı, çalışan_adı kullanarak çalışan tablosunu sorgularsa, sistem çalışan_adı kullanarak Employee_JI birleştirme endeksine erişebilir. Birleştirme dizininin satırları, çalışan_adı sütununda karma hale getirilmiştir. Birleştirme dizini tanımlanmamışsa ve çalışan_adı ikincil dizin olarak tanımlanmamışsa, sistem, zaman alan satırlara erişmek için tam tablo taraması gerçekleştirecektir.

Aşağıdaki EXPLAIN planını çalıştırabilir ve optimize edici planını doğrulayabilirsiniz. Aşağıdaki örnekte, tablo Employee_Name sütununu kullanarak sorguladığında, optimize edicinin temel Çalışan tablosu yerine Katılma Dizini kullandığını görebilirsiniz.

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.

Çoklu Masa Birleştirme Dizini

Birden fazla tablonun birleştirilmesiyle çoklu tablo birleştirme indeksi oluşturulur. Çoklu tablo birleştirme indeksi, performansı artırmak için sık birleştirilmiş tabloların sonuç kümesini depolamak için kullanılabilir.

Misal

Aşağıdaki örnek, Employee ve Salary tablolarına katılarak Employee_Salary_JI adlı bir JOIN INDEX oluşturur.

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);

Çalışan veya Maaş temel tabloları güncellendiğinde, Katılma indeksi Employee_Salary_JI da otomatik olarak güncellenir. Çalışan ve Maaş tablolarını birleştiren bir sorgu çalıştırıyorsanız, optimize edici, tabloları birleştirmek yerine Employee_Salary_JI'deki verilere doğrudan erişmeyi seçebilir. Sorgudaki EXPLAIN planı, optimize edicinin temel tabloyu veya Birleştirme indeksini seçip seçmeyeceğini doğrulamak için kullanılabilir.

Toplu Katılım Dizini

Bir tablo belirli sütunlarda tutarlı bir şekilde toplanmışsa, performansı artırmak için toplu birleştirme indeksi tabloda tanımlanabilir. Toplam birleştirme dizininin bir sınırlaması, yalnızca SUM ve COUNT işlevlerini desteklemesidir.

Misal

Aşağıdaki örnekte Çalışan ve Maaş, Departman başına toplam maaşı belirlemek için birleştirilmiştir.

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);