MongoDB में किसी संग्रह पर सभी इंडेक्स रीबिल्ड करने के लिए, reIndex() कमांड का उपयोग करें। यह सभी इंडेक्स ( _id को छोड़कर) को ड्रॉप करता है और उन्हें पुनर्निर्मित करता है, जो इंडेक्स भ्रष्टाचार या खंडन के बाद उपयोगी हो सकता है।
उदाहरण: इंडेक्स बनाएं
> db.demo42.createIndex({"StudentFirstName":1});
{ "createdCollectionAutomatically" : true, "numIndexesBefore" : 1, "numIndexesAfter" : 2, "ok" : 1 }
सभी इंडेक्स रीबिल्ड करें
> db.demo42.reIndex({"StudentFirstName":1});
नोट: reIndex() एक वैकल्पिक इंडेक्स स्पेसिफिकेशन तर्क स्वीकार करता है लेकिन **सभी** इंडेक्स रीबिल्ड करता है; तर्क अनदेखा किया जाता है (विरासत संगतता)।
परिणाम
{
"nIndexesWas" : 2,
"nIndexes" : 2,
"indexes" : [
{ "v" : 2, "key" : { "_id" : 1 }, "name" : "_id_", "ns" : "web.demo42" },
{ "v" : 2, "key" : { "StudentFirstName" : 1 }, "name" : "StudentFirstName_1", "ns" : "web.demo42" }
],
"ok" : 1
}
व्याख्या
nIndexesWas: रीबिल्ड से पहले इंडेक्स की संख्या।nIndexes: रीबिल्ड के बाद इंडेक्स की संख्या।indexes: इंडेक्स विवरण सरणी (_idइंडेक्स हमेशा मौजूद)।
कब उपयोग करें
- इंडेक्स भ्रष्टाचार के बाद (दुर्लभ)।
- बड़े पैमाने पर डिलीट/अपडेट के बाद खंडन पुनर्प्राप्त करने के लिए।
- रखरखाव विंडो के दौरान।
चेतावनी
reIndex()संग्रह पर एक्सक्लूसिव लॉक प्राप्त करता है; सभी पढ़ने/लिखने ऑपरेशन अवधि के लिए ब्लॉक होते हैं।
<ली>बड़े संग्रह के लिए, यह धीमा हो सकता है; रखरखाव विंडो के दौरान चलाएं।ली>
<ली>शार्डेड क्लस्टर में, प्रत्येक शार्ड पर
reIndex चलाएं।ली>
वैकल्पिक: विशिष्ट इंडेक्स रीबिल्ड करें
एकल इंडेक्स रीबिल्ड करने के लिए, इसे ड्रॉप करें और पुनः बनाएं:
> db.demo42.dropIndex("StudentFirstName_1");
> db.demo42.createIndex({"StudentFirstName":1});
यह केवल उस इंडेक्स को प्रभावित करता है और समान लॉकिंग प्रभाव डालता है।