MongoDB
 sql >> Base de données >  >> NoSQL >> MongoDB

temps de recherche avec index> sans index

Dans ce cas, l'index n'aide pas car votre ensemble de résultats correspondants se compose de la quasi-totalité de la collection. Cela signifie qu'il doit se charger dans la RAM et parcourir la majeure partie de l'index, ainsi que se charger dans la RAM et parcourir les documents eux-mêmes.

Sans l'index, il ferait juste une analyse de table, inspectant chaque document et retournant s'il y a correspondance.

Dans des cas comme celui-ci où une requête va renvoyer presque une collection entière, un index peut ne pas être utile.

L'ajout d'un .limit() accélérera la requête. Vous pouvez également forcer l'optimiseur de requête à ne pas utiliser l'index avec .hint() :

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

Vous pouvez également forcer la requête à fournir les valeurs de résultat directement à partir de l'index lui-même en limitant les champs sélectionnés à ceux que vous avez indexés. Cela lui permet d'éviter d'avoir à charger des documents après avoir effectué la numérisation de l'index.

Essayez ceci et voyez si la sortie d'explication indique "indexOnly":true

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

Détails ici :

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