इंडेक्स बनाकर SELECT DISTINCT परफॉरमेंस सुधारना
SELECT DISTINCT क्वेरी को तेज करने का सबसे प्रभावी तरीका संबंधित कॉलम पर INDEX बनाना है।
टेबल बनाना
CREATE TABLE DemoTable (Name VARCHAR(40));
इंडेक्स बनाना
CREATE INDEX Name_Index ON DemoTable(Name);
Query OK, 0 rows affected (1.56 sec) Records: 0 Duplicates: 0 Warnings: 0
डेटा इन्सर्ट करना
INSERT INTO DemoTable VALUES('Chris');
INSERT INTO DemoTable VALUES('Mike');
INSERT INTO DemoTable VALUES('Chris');
INSERT INTO DemoTable VALUES('Chris');
INSERT INTO DemoTable VALUES('Sam');
मौजूदा डेटा
+-------+ | Name | +-------+ | Chris | | Chris | | Chris | | Mike | | Sam | +-------+
क्वेरी: डिस्टिंक्ट नाम
SELECT DISTINCT Name FROM DemoTable;
+-------+ | Name | +-------+ | Chris | | Mike | | Sam | +-------+
क्यों इंडेक्स मदद करता है
- इंडेक्स के बिना: फुल टेबल स्कैन + टेम्पररी टेबल + फाइलसॉर्ट
- इंडेक्स के साथ: इंडेक्स स्कैन (पहले से सॉर्टेड) + डुप्लीकेट स्किप
- कवरिंग इंडेक्स होने पर टेबल एक्सेस की जरूरत नहीं
अन्य ऑप्टिमाइज़ेशन टिप्स
- कम कॉलम चुनें:
SELECT DISTINCT col1, col2के बजाय जरूरी कॉलम ही चुनें - WHERE क्लॉज पहले: फिल्टर करके रो कम करें फिर DISTINCT लागू करें
- LIMIT उपयोग करें: अगर केवल कुछ रिजल्ट चाहिए तो
LIMIT 10 - EXPLAIN विश्लेषण:
EXPLAIN SELECT DISTINCT ...से एक्सीक्यूशन प्लान चेक करें
कंपोजिट इंडेक्स (एकाधिक कॉलम)
CREATE INDEX idx_name_city ON DemoTable(Name, City); SELECT DISTINCT Name, City FROM DemoTable;
चेतावनी
- इंडेक्स इन्सर्ट/अपडेट/डिलीट को धीमा करते हैं
- स्टोरेज स्पेस लेते हैं
- कम कार्डिनैलिटी (कम यूनिक वैल्यू) वाले कॉलम पर इंडेक्स कम प्रभावी