MongoDB ha un profiler integrato che puoi abilitare tramite:
db.setProfilingLevel(2)
Invece di '2' puoi scegliere qualsiasi opzione dall'elenco seguente:
- 0 - il profiler è spento, non raccoglie alcun dato. mongod scrive sempre operazioni più lunghe della soglia slowOpThresholdMs nel proprio registro.
- 1 - raccoglie dati di profilazione solo per operazioni lente. Per impostazione predefinita, le operazioni lente sono quelle inferiori a 100 millisecondi. È possibile modificare la soglia per le operazioni "lente" con l'opzione di runtime slowOpThresholdMs o il comando setParameter. Per ulteriori informazioni, vedere la sezione Specificare la soglia per le operazioni lente.
- 2 - raccoglie i dati di profilazione per tutte le operazioni di database.
E puoi vedere i risultati delle tue query controllando il system.profile raccolta in MongoDB..
MODIFICA:
Se vuoi testare le prestazioni puoi usare i seguenti frammenti di codice che possono essere eseguiti dalla 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()
E le mie conclusioni sono le seguenti:
- aggiunta di un indice (a parte l'id) ha restituito il conteggio di 10 milioni di record in circa 170 ms
- contare per ID (conteggio senza query) ha restituito il conteggio in meno di un millisecondo
- contare per ID con il cursore (nota che .find() fungerà da cursore sulla raccolta) ha restituito il conteggio in meno di un millisecondo
Quindi più indici la tua collezione è più lenta sarà la tua query . Se conta per _id sarà istantaneo , se hai un indice composito ridimensionerà in base al numero di indici .