Tælleforespørgsler, indekserede eller på anden måde, er langsomme på grund af det faktum, at MongoDB stadig er nødt til at lave en fuld b-tree walk for at finde det passende antal dokumenter, der matcher dine kriterier. Grunden til dette er, at MongoDB b-træstrukturen ikke "tælles", hvilket betyder, at hver node ikke gemmer information om mængden af elementer i noden/undertræet.
Problemet rapporteres her https://jira.mongodb.org/browse/SERVER-1752 og der er i øjeblikket ingen løsning til at forbedre ydeevnen udover manuelt at vedligeholde en tæller for den samling, hvilket naturligvis har et par ulemper.
Bemærk også, at versionen af db.col.count() (så ingen kriterier) kan tage en stor genvej og faktisk ikke udfører en forespørgsel, derfor er dens hastighed. Når det er sagt, rapporterer det ikke altid den samme værdi, som en tælleforespørgsel ville returnere alle elementer (det vil for eksempel ikke være i shardede miljøer med høj skrivegennemstrømning). Op til debat, om det er en fejl eller ej. Det tror jeg, det er.
Bemærk, at der i 2.3+ blev introduceret en betydelig optimering, der skulle (og gør) forbedre ydeevnen af optællinger på indekserede felter. Se:https://jira.mongodb.org/browse/SERVER-7745