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

Mongo compte vraiment lentement quand il y a des millions d'enregistrements

Les requêtes de comptage, indexées ou non, sont lentes en raison du fait que MongoDB doit encore effectuer un parcours complet de l'arbre b pour trouver le nombre approprié de documents correspondant à vos critères. La raison en est que la structure b-tree MongoDB n'est pas "comptée", ce qui signifie que chaque nœud ne stocke pas d'informations sur la quantité d'éléments dans le nœud/sous-arbre.

Le problème est signalé ici https://jira.mongodb.org/browse/SERVER-1752 et il n'existe actuellement aucune solution de contournement pour améliorer les performances autre que la maintenance manuelle d'un compteur pour cette collection, ce qui présente évidemment quelques inconvénients.

Notez également que la version db.col.count() (donc pas de critères) peut prendre un gros raccourci et n'exécute pas réellement de requête, d'où sa rapidité. Cela dit, il ne rapporte pas toujours la même valeur qu'une requête de comptage qui devrait retourner tous les éléments (ce ne sera pas dans des environnements fragmentés avec un débit d'écriture élevé par exemple). À débattre pour savoir si c'est un bug ou non. Je pense que oui.

Notez que dans la version 2.3+, une optimisation significative a été introduite qui devrait améliorer (et améliore) les performances des comptages sur les champs indexés. Voir :https://jira.mongodb.org/browse/SERVER-7745