MySQL में बहु-कॉलम (संयुक्त) इंडेक्स बनाना
MySQL में, आप KEY() क्लॉज (या INDEX) का उपयोग करके टेबल निर्माण के दौरान एक संयुक्त इंडेक्स (बहु-कॉलम इंडेक्स) परिभाषित कर सकते हैं। यह उन क्वेरी के लिए प्रदर्शन में सुधार करता है जो उन कॉलम पर फ़िल्टर या जॉइन करती हैं।
उदाहरण: 3-कॉलम संयुक्त इंडेक्स
mysql> CREATE TABLE DemoTable1437 (
-> StudentId INT,
-> StudentName VARCHAR(20),
-> StudentMarks INT,
-> StudentAge INT,
-> KEY(StudentId, StudentMarks, StudentAge)
-> );
Query OK, 0 rows affected (0.97 sec)
mysql> DESC DemoTable1437;
+--------------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+--------------+-------------+------+-----+---------+-------+
| StudentId | int(11) | YES | MUL | NULL | |
| StudentName | varchar(20) | YES | | NULL | |
| StudentMarks | int(11) | YES | | NULL | |
| StudentAge | int(11) | YES | | NULL | |
+--------------+-------------+------+-----+---------+-------+
4 rows in set (0.01 sec)
Key कॉलम में MUL दर्शाता है कि StudentId संयुक्त इंडेक्स का हिस्सा है (बाएं-सबसे पहले कॉलम)।
डेटा डालें और क्वेरी करें
mysql> INSERT INTO DemoTable1437 VALUES (101, 'Chris', 78, 21), (102, 'David', 89, 22); Query OK, 2 rows affected (0.44 sec) mysql> SELECT * FROM DemoTable1437; +-----------+-------------+--------------+------------+ | StudentId | StudentName | StudentMarks | StudentAge | +-----------+-------------+--------------+------------+ | 101 | Chris | 78 | 21 | | 102 | David | 89 | 22 | +-----------+-------------+--------------+------------+ 2 rows in set (0.00 sec)
संयुक्त इंडेक्स सर्वोत्तम अभ्यास
- कॉलम क्रम मायने रखता है: सबसे अधिक चयनात्मक/अक्सर फ़िल्टर किए जाने वाले कॉलम को पहले रखें
- बाएं-उपसर्ग नियम: इंडेक्स (A,B,C) पर क्वेरी A, (A,B), या (A,B,C) पर फ़िल्टर कर सकती है - लेकिन B अकेले या (B,C) पर नहीं
- कवरिंग इंडेक्स: यदि क्वेरी केवल इंडेक्स किए गए कॉलम का चयन करती है, तो यह टेबल एक्सेस से बचती है
वैकल्पिक सिंटैक्स
-- टेबल निर्माण के बाद INDDEX का उपयोग CREATE INDEX idx_student_composite ON DemoTable1437(StudentId, StudentMarks, StudentAge); -- नामित इंडेक्स CREATE INDEX idx_name ON DemoTable1437(StudentId, StudentMarks, StudentAge);
इंडेक्स उपयोग सत्यापित करें
EXPLAIN SELECT * FROM DemoTable1437 WHERE StudentId = 101 AND StudentMarks > 70;