Заявките за преброяване, индексирани или по друг начин, са бавни поради факта, че MongoDB все още трябва да направи пълно обхождане на b-дърво, за да намери подходящия брой документи, които отговарят на вашите критерии. Причината за това е, че b-дървовидната структура на MongoDB не се „отчита“, което означава, че всеки възел не съхранява информация за количеството елементи във възела/поддървото.
Проблемът се съобщава тук https://jira.mongodb.org/browse/SERVER-1752 и в момента няма заобиколно решение за подобряване на производителността, освен ръчно поддържане на брояч за тази колекция, което очевидно идва с няколко недостатъка.
Също така имайте предвид, че версията db.col.count() (така че няма критерии) може да приеме голям пряк път и всъщност не изпълнява заявка, поради което е бърза. Това каза, че не винаги отчита същата стойност като заявка за преброяване, която би трябвало да върне всички елементи (няма да бъде в шардирани среди с висока производителност на запис например). Подлежи на дебат дали това е грешка или не. Мисля, че е така.
Имайте предвид, че във 2.3+ беше въведена значителна оптимизация, която трябва (и наистина) да подобри производителността на броя на индексираните полета. Вижте:https://jira.mongodb.org/browse/SERVER-7745