O MongoDB tem um profiler integrado que você pode habilitar via:
db.setProfilingLevel(2)
Em vez de '2' você pode escolher qualquer opção da lista abaixo:
- 0 - o criador de perfil está desligado, não coleta nenhum dado. O mongod sempre grava operações maiores que o limite slowOpThresholdMs em seu log.
- 1 - coleta dados de perfil apenas para operações lentas. Por padrão, as operações lentas são aquelas mais lentas que 100 milissegundos. Você pode modificar o limite para operações “lentas” com a opção de tempo de execução slowOpThresholdMs ou o comando setParameter. Consulte a seção Especificar o limite para operações lentas para obter mais informações.
- 2 - coleta dados de perfil para todas as operações do banco de dados.
E você pode ver os resultados de suas consultas verificando o system.profile coleção no MongoDB..
EDITAR:
Se você quiser testar o desempenho, poderá usar os seguintes trechos de código que podem ser executados no console do 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 minhas conclusões são as seguintes:
- adicionar um índice (além do id) retornou a contagem de 10 milhões de registros em cerca de 170 ms
- contagem por ID (contagem sem qualquer consulta) retornou a contagem em menos de um milissegundo
- contagem por id com cursor (observe que .find() atuará como um cursor sobre a coleção) retornou a contagem em menos de um milissegundo
Portanto, os mais índices sua coleção tem o mais lento será sua consulta . Se você contar por _id, será instantâneo , se você tiver um índice composto ele será escalonado com base no número de índices .