MongoDB има вграден профилиращ инструмент, който можете да активирате чрез:
db.setProfilingLevel(2)
Вместо '2' можете да изберете всяка опция от списъка по-долу:
- 0 - Профайлърът е изключен, не събира никакви данни. mongod винаги записва операции, по-дълги от прага на slowOpThresholdMs, в своя журнал.
- 1 - събира данни за профилиране само за бавни операции. По подразбиране бавните операции са тези, които са по-бавни от 100 милисекунди. Можете да промените прага за „бавни“ операции с опцията за изпълнение slowOpThresholdMs или командата setParameter. Вижте раздела Указване на прага за бавни операции за повече информация.
- 2 - събира данни за профилиране за всички операции с бази данни.
И можете да видите резултатите от вашите заявки, като проверите system.profile колекция в MongoDB..
РЕДАКТИРАНЕ:
Ако искате да тествате ефективността, можете да използвате следните фрагменти от код, които могат да бъдат изпълнени от конзолата 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()
И моите заключения са следните:
- добавяне на индекс (с изключение на идентификатора) върна броя за 10 милиона записа за около 170 ms
- броене по id (броене без заявка) върна броя за по-малко от милисекунда
- броене по идентификатор с курсор (имайте предвид, че .find() ще действа като курсор над колекцията) върна броя за по-малко от милисекунда
Така че повече индекси вашата колекция има, толкова по-бавна ще бъде вашата заявка . Ако преброите по _id, ще бъде моментално , ако имате съставен индекс той ще мащабира въз основа на броя на индексите .