टेराडाटा - जोइन इंडेक्स
JOIN INDEX एक भौतिकवादी दृश्य है। इसकी परिभाषा को स्थायी रूप से संग्रहीत किया जाता है और डेटा तब भी अपडेट किया जाता है जब ज्वाइन इंडेक्स में निर्दिष्ट बेस टेबल को अपडेट किया जाता है। JOIN INDEX में एक या एक से अधिक टेबल हो सकते हैं और पूर्व-एकत्रित डेटा भी हो सकता है। प्रदर्शन में सुधार के लिए मुख्य रूप से जॉइन इंडेक्स का उपयोग किया जाता है।
विभिन्न प्रकार के ज्वाइन इंडेक्स उपलब्ध हैं।
- सिंगल टेबल जॉइन इंडेक्स (STJI)
- मल्टी टेबल जॉइन इंडेक्स (MTJI)
- एग्रीगेटेड ज्वाइन इंडेक्स (AJI)
सिंगल टेबल इंडेक्स में शामिल हों
सिंगल टेबल जॉइन इंडेक्स बेस टेबल से एक की तुलना में अलग-अलग प्राइमरी इंडेक्स कॉलम के आधार पर बड़ी टेबल को विभाजित करने की अनुमति देता है।
वाक्य - विन्यास
इसके बाद एक JOIN INDEX का सिंटेक्स है।
CREATE JOIN INDEX <index name>
AS
<SELECT Query>
<Index Definition>;
उदाहरण
निम्नलिखित कर्मचारी और वेतन तालिका पर विचार करें।
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);
निम्नलिखित एक उदाहरण है जो कर्मचारी तालिका पर Employee_JI नामक एक सम्मिलित सूचकांक बनाता है।
CREATE JOIN INDEX Employee_JI
AS
SELECT EmployeeNo,FirstName,LastName,
BirthDate,JoinedDate,DepartmentNo
FROM Employee
PRIMARY INDEX(FirstName);
यदि उपयोगकर्ता EmployeeNo पर WHERE क्लॉज के साथ एक क्वेरी सबमिट करता है, तो सिस्टम अद्वितीय प्राथमिक इंडेक्स का उपयोग करके कर्मचारी तालिका को क्वेरी करेगा। यदि उपयोगकर्ता कर्मचारी_ कर्मचारी का उपयोग करके कर्मचारी की तालिका पर सवाल उठाता है, तो सिस्टम कर्मचारी_नाम का उपयोग करके जुड़ने वाले कर्मचारी EmpJee_JI तक पहुंच सकता है। ज्वाइन इंडेक्स की पंक्तियों को कर्मचारी_नाम कॉलम पर हैश किया गया है। यदि जॉइन इंडेक्स को परिभाषित नहीं किया गया है और कर्मचारी_नाम को द्वितीयक इंडेक्स के रूप में परिभाषित नहीं किया गया है, तो सिस्टम उन पंक्तियों को एक्सेस करने के लिए पूर्ण तालिका स्कैन करेगा जो समय लेने वाली है।
आप निम्नलिखित योजना को चला सकते हैं और अनुकूलक योजना को सत्यापित कर सकते हैं। निम्न उदाहरण में आप देख सकते हैं कि अनुकूलक कर्मचारी आधार तालिका के बजाय Join Index का उपयोग कर रहा है जब तालिका Employee_Name स्तंभ का उपयोग करके क्वेरी करती है।
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.
मल्टी टेबल ज्वाइन इंडेक्स
एक मल्टी-टेबल जॉइन इंडेक्स एक से अधिक टेबल को मिलाकर बनाया जाता है। मल्टी-टेबल जॉइन इंडेक्स का उपयोग प्रदर्शन में सुधार के लिए अक्सर शामिल किए गए तालिकाओं के परिणाम सेट को स्टोर करने के लिए किया जा सकता है।
उदाहरण
निम्न उदाहरण कर्मचारी और वेतन सारणी में शामिल होकर एक कर्मचारी का नाम लेते हैं, जिसका नाम Employee_Salary_JI है।
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);
जब भी बेस टेबल कर्मचारी या वेतन अपडेट किया जाता है, तो Join index Employee_Salary_JI भी स्वचालित रूप से अपडेट हो जाता है। यदि आप कर्मचारी और वेतन तालिका में शामिल होने के लिए एक क्वेरी चला रहे हैं, तो ऑप्टिमाइज़र तालिकाओं में शामिल होने के बजाय सीधे Employee_Salary_JI से डेटा तक पहुंचने का विकल्प चुन सकता है। क्वेरी पर EXPLAIN योजना का उपयोग यह सत्यापित करने के लिए किया जा सकता है कि ऑप्टिमाइज़र आधार तालिका या जॉइन इंडेक्स का चयन करेगा।
समुच्चय सूचकांक में शामिल हों
यदि किसी तालिका को कुछ स्तंभों पर लगातार एकत्रित किया जाता है, तो प्रदर्शन में सुधार करने के लिए तालिका में समग्र सम्मिलित सूचकांक को परिभाषित किया जा सकता है। कुल जुड़ाव सूचकांक की एक सीमा यह है कि यह केवल SUM और COUNT फ़ंक्शन का समर्थन करता है।
उदाहरण
निम्नलिखित उदाहरण में कर्मचारी और वेतन प्रति विभाग के कुल वेतन की पहचान करने के लिए शामिल हुए हैं।
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);