MongoDB a un profileur intégré que vous pouvez activer via :
db.setProfilingLevel(2)
Au lieu de "2", vous pouvez choisir n'importe quelle option dans la liste ci-dessous :
- 0 - le profileur est éteint, ne collecte aucune donnée. mongod écrit toujours les opérations plus longues que le seuil slowOpThresholdMs dans son journal.
- 1 - collecte les données de profilage pour les opérations lentes uniquement. Par défaut, les opérations lentes sont celles qui prennent moins de 100 millisecondes. Vous pouvez modifier le seuil des opérations « lentes » avec l'option d'exécution slowOpThresholdMs ou la commande setParameter. Consultez la section Spécifier le seuil pour les opérations lentes pour plus d'informations.
- 2 - collecte des données de profilage pour toutes les opérations de base de données.
Et vous pouvez voir les résultats de vos requêtes en vérifiant le system.profile collecte dans MongoDB..
MODIF :
Si vous souhaitez tester les performances, vous pouvez utiliser les extraits de code suivants qui peuvent être exécutés à partir de la console mongo :
> for (var i = 0; i < 10000000; ++i) { db.countTest.insert({a: i % 10}) }
> db.countTest.ensureIndex({a:1})
> db.countTest.count({a: 1})
> db.countTest.count()
> db.countTest.find().count()
Et mes conclusions sont les suivantes :
- ajouter un index (en dehors de l'identifiant) a renvoyé le nombre de 10 millions d'enregistrements en environ 170 ms
- comptage par identifiant (compter sans aucune requête) a renvoyé le compte en moins d'une milliseconde
- comptage par identifiant avec le curseur (notez que le .find() agira comme un curseur sur la collection) a renvoyé le décompte en moins d'une milliseconde
Ainsi, plus d'index votre collection a votre requête sera plus lente . Si vous comptez par _id, ce sera instantané , si vous avez un index composite il sera dimensionné en fonction du nombre d'index .