MongoDB
 sql >> Datenbank >  >> NoSQL >> MongoDB

Suchzeit mit Index> ohne Index

In diesem Fall hilft der Index nicht weiter, da Ihre übereinstimmende Ergebnismenge fast aus der gesamten Sammlung besteht. Das bedeutet, dass es in den RAM laden und den größten Teil des Index durchlaufen muss, sowie in den RAM laden und die Dokumente selbst durchlaufen muss.

Ohne den Index würde es nur einen Tabellenscan durchführen, jedes Dokument prüfen und bei Übereinstimmung zurückgeben.

In solchen Fällen, in denen eine Abfrage fast eine gesamte Sammlung zurückgibt, ist ein Index möglicherweise nicht hilfreich.

Das Hinzufügen eines .limit() beschleunigt die Abfrage. Sie können den Abfrageoptimierer auch mit .hint():

zwingen, den Index nicht zu verwenden
db.collection.find().hint({$natural:1})

Sie können die Abfrage auch dazu zwingen, die Ergebniswerte direkt aus dem Index selbst bereitzustellen, indem Sie die ausgewählten Felder auf die von Ihnen indizierten beschränken. Dadurch wird vermieden, dass nach dem Index-Scan irgendwelche Dokumente geladen werden müssen.

Versuchen Sie dies und prüfen Sie, ob die EXPLAIN-Ausgabe "indexOnly":true anzeigt

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

Details hier:

http://www.mongodb.org /display/DOCS/Abrufen+einer+Teilmenge+von+Feldern#AbrufeneinerTeilmengevonFelder-bedecktenIndizes