sql >> Databasteknik >  >> NoSQL >> MongoDB

söktid med index> utan index

I det här fallet hjälper inte indexet eftersom din matchande resultatuppsättning består av nästan hela samlingen. Det betyder att det måste laddas in i RAM-minnet och gå igenom det mesta av indexet, samt ladda in i RAM-minnet och gå igenom dokumenten själva.

Utan indexet skulle det bara göra en tabellskanning, inspektera varje dokument och returnera om det matchades.

I fall som detta där en fråga kommer att returnera nästan en hel samling kanske ett index inte är användbart.

Att lägga till en .limit() kommer att påskynda frågan. Du kan också tvinga frågeoptimeraren att inte använda indexet med .hint():

db.collection.find().hint({$natural:1})

Du kan också tvinga frågan att tillhandahålla resultatvärdena direkt från själva indexet genom att begränsa de valda fälten till endast de du har indexerat. Detta gör att den undviker behovet av att ladda några dokument efter att ha gjort indexskanningen.

Prova detta och se om förklara-utgången indikerar "indexOnly":true

db.numbers.find({number: {$gt: 10000}}, {number:1}).explain()

Detaljer här:

http://www.mongodb.org /display/DOCS/Retrieving+a+Subset+of+Fields#RetrievingaSubsetofFields-CoveredIndexes




  1. Konvertera sträng till datum i mongodb

  2. Mongoose QueryStream nya resultat

  3. MongoDB Schema Design - Många små dokument eller färre stora dokument?

  4. Hur kan du ladda inledande data i MongoDB genom Spring Boot?