डेटाबेस इंडेक्स डेटा संरचना है जो टेबल ऑपरेशन की गति बढ़ाती है। सही इंडेक्सिंग रणनीति प्रदर्शन के लिए महत्वपूर्ण है।
सर्वोत्तम अभ्यास
1. सही कॉलम इंडेक्स करें
WHERE,JOIN,ORDER BY,GROUP BYमें उपयोग होने वाले कॉलम- उच्च कार्डिनैलिटी (अद्वितीय मान अधिक) वाले कॉलम
- विदेशी कुंजी कॉलम (JOIN प्रदर्शन के लिए)
2. कम्पोजिट इंडेक्स क्रम मायने रखता है
-- WHERE a=1 AND b=2 AND c=3 के लिए
CREATE INDEX idx_abc ON t(a, b, c); -- सही क्रम
-- यह क्वेरी भी उपयोग कर सकती है:
-- WHERE a=1
-- WHERE a=1 AND b=2
-- लेकिन नहीं: WHERE b=2 (a के बिना)
3. इंडेक्स के नुकसान समझें
- INSERT/UPDATE/DELETE धीमे होते हैं - इंडेक्स भी अपडेट होता है
- डिस्क स्पेस - प्रत्येक इंडेक्स अतिरिक्त स्टोरेज लेता है
- बहुत अधिक इंडेक्स - ऑप्टिमाइज़र को भ्रमित कर सकते हैं
4. कवरिंग इंडेक्स उपयोग करें
-- यदि क्वेरी केवल इंडेक्स कॉलम एक्सेस करती है
SELECT id, name FROM users WHERE email = 'x@y.com';
-- इंडेक्स: (email, id, name) -- "कवरिंग इंडेक्स", टेबल एक्सेस नहीं
5. अनावश्यक इंडेक्स हटाएं
-- अप्रयुक्त इंडेक्स ढूंढें (MySQL 5.7+)
SELECT * FROM sys.schema_unused_indexes;
उदाहरण: इंडेक्स बनाना
mysql> CREATE TABLE IndexingDemo (Id INT, Name VARCHAR(100));
mysql> CREATE INDEX indexName ON IndexingDemo(Name);
Query OK, 0 rows affected (0.75 sec)
इंडेक्स प्रकार
- B-Tree (डिफ़ॉल्ट): समानता, रेंज, सॉर्टिंग, ग्रुपिंग
- Hash: केवल समानता (=, IN), MEMORY इंजन
- Fulltext: टेक्स्ट खोज (MyISAM, InnoDB 5.6+)
- Spatial: ज्यामितीय डेटा
निगरानी और रखरखाव
-- इंडेक्स उपयोग सांख्यिकी
SELECT * FROM sys.schema_index_statistics WHERE table_name = 'mytable';
-- फ्रैगमेंटेशन जांचें
ANALYZE TABLE mytable;
OPTIMIZE TABLE mytable; -- इंडेक्स पुनर्निर्माण