MongoDB ma wbudowany profiler, który można włączyć za pomocą:
db.setProfilingLevel(2)
Zamiast „2” możesz wybrać dowolną opcję z poniższej listy:
- 0 - profiler jest wyłączony, nie zbiera żadnych danych. mongod zawsze zapisuje w swoim dzienniku operacje dłuższe niż próg slowOpThresholdMs.
- 1 - zbiera dane profilowania tylko dla powolnych operacji. Domyślnie powolne operacje to te wolniejsze niż 100 milisekund. Możesz zmienić próg dla „wolnych” operacji za pomocą opcji runtime slowOpThresholdMs lub polecenia setParameter. Zobacz sekcję Określanie progu powolnych operacji, aby uzyskać więcej informacji.
- 2 - zbiera dane profilowania dla wszystkich operacji na bazie danych.
Możesz zobaczyć wyniki swoich zapytań, sprawdzając system.profile kolekcja w MongoDB..
EDYTUJ:
Jeśli chcesz przetestować wydajność, możesz użyć następujących fragmentów kodu, które można wykonać z konsoli 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()
A moje wnioski są następujące:
- dodawanie indeksu (oprócz identyfikatora) zwrócił liczbę 10 milionów rekordów w około 170ms
- liczenie według identyfikatora (liczba bez zapytania) zwróciła liczbę w mniej niż milisekundę
- liczenie według identyfikatora za pomocą kursora (zwróć uwagę, że .find() będzie działać jako kursor nad kolekcją) zwróci licznik w mniej niż milisekundę
Więc więcej indeksów Twoja kolekcja ma wolniejsze działanie zapytania . Jeśli liczysz według _id, będzie to natychmiastowe , jeśli masz indeks złożony będzie skalować na podstawie liczby indeksów .