MongoDB क्वेरी धीमी होने पर **इंडेक्स** बनाकर प्रदर्शन में नाटकीय सुधार कर सकते हैं। इंडेक्स के बिना MongoDB को पूरा कलेक्शन स्कैन करना पड़ता है।
इंडेक्स बनाने का सिंटैक्स
db.yourCollectionName.createIndex({yourFieldName: 1});
1 = आरोही, -1 = अवरोही।
पहला तरीका: सिंगल फील्ड इंडेक्स (संख्या/स्ट्रिंग)
> db.takeLessTimeToSearchDemo.createIndex({"EmployeeName": 1});
{ "createdCollectionAutomatically" : true, "numIndexesBefore" : 1, "numIndexesAfter" : 2, "ok" : 1 }
यह स्ट्रिंग/संख्या फील्ड के लिए मानक इंडेक्स है। समानता और रेंज क्वेरी दोनों के लिए काम करता है।
दूसरा तरीका: टेक्स्ट इंडेक्स (पूर्ण-पाठ खोज)
> db.takeLessTimeToSearchDemo1.createIndex({"EmployeeName": "text"});
{ "createdCollectionAutomatically" : true, "numIndexesBefore" : 1, "numIndexesAfter" : 2, "ok" : 1 }
उपयोग: $text ऑपरेटर के साथ पूर्ण-पाठ खोज के लिए:
db.collection.find({$text: {$search: "John"}})
तीसरा तरीका: हैश्ड इंडेक्स (शार्डिंग/वितरण)
> db.takeLessTimeToSearchDemo2.createIndex({"EmployeeName": "hashed"});
{ "createdCollectionAutomatically" : true, "numIndexesBefore" : 1, "numIndexesAfter" : 2, "ok" : 1 }
उपयोग: शार्ड की के लिए, उच्च कार्डिनैलिटी फील्ड के लिए, रेंज क्वेरी नहीं** समर्थन करता।
इंडेक्स प्रकार सारांश
| प्रकार | सिंटैक्स | उपयोग |
|---|---|---|
| सिंगल फील्ड | {field: 1} | सामान्य क्वेरी, सॉर्ट |
| कंपाउंड | {field1: 1, field2: -1} | एकाधिक फील्ड क्वेरी |
| मल्टीकी | {arrayField: 1} | सरणी फील्ड (स्वचालित) |
| टेक्स्ट | {field: "text"} | पूर्ण-पाठ खोज |
| हैश्ड | {field: "hashed"} | शार्डिंग, समानता |
| जियोस्पेशियल | {field: "2dsphere"} | स्थान क्वेरी |
इंडेक्स जांचें
db.collection.getIndexes()
क्वेरी प्लान विश्लेषण
db.collection.find({field: "value"}).explain("executionStats")
मुख्य संकेतक: totalKeysExamined vs totalDocsExamined - इंडेक्स उपयोग होने पर Keys << Docs होना चाहिए।