sql >> Database >  >> NoSQL >> MongoDB

zoektijd met index> zonder index

In dit geval helpt de index niet, omdat uw overeenkomende resultatenset bijna de hele verzameling omvat. Dat betekent dat het in het RAM moet worden geladen en het grootste deel van de index moet doorlopen, evenals in het RAM moet worden geladen en de documenten zelf moet doorlopen.

Zonder de index zou het gewoon een tabelscan doen, elk document inspecteren en terugkeren als het overeenkomt.

In dit soort gevallen waarin een zoekopdracht bijna een hele verzameling oplevert, is een index misschien niet nuttig.

Het toevoegen van een .limit() versnelt de query. U kunt de query-optimizer ook dwingen de index niet te gebruiken met .hint():

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

U kunt de query ook dwingen om de resultaatwaarden rechtstreeks vanuit de index zelf te leveren door de geselecteerde velden te beperken tot alleen de velden die u hebt geïndexeerd. Hierdoor is het niet nodig om documenten te laden nadat de indexscan is uitgevoerd.

Probeer dit en kijk of de uitvoer van de uitleg "indexOnly":true . aangeeft

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

Details hier:

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




  1. Hoe een Bulk upsert/update correct uit te voeren in MongoDB

  2. Mongoose findByIdAndUpdate geeft niet het juiste model terug

  3. Hoe afstand te krijgen - MongoDB Template Near-functie

  4. mangoestmodel voor meerdere soorten gebruikers