Telquery's, al dan niet geïndexeerd, zijn traag omdat MongoDB nog steeds een volledige b-tree-wandeling moet maken om het juiste aantal documenten te vinden dat aan uw criteria voldoet. De reden hiervoor is dat de MongoDB b-tree-structuur niet wordt "geteld", wat betekent dat elke node geen informatie opslaat over het aantal elementen in de node/subtree.
Het probleem wordt hier gemeld https://jira.mongodb.org/browse/SERVER-1752 en er is momenteel geen andere oplossing om de prestaties te verbeteren dan het handmatig bijhouden van een teller voor die verzameling, wat uiteraard een paar nadelen met zich meebrengt.
Merk ook op dat de db.col.count()-versie (dus geen criteria) een grote snelkoppeling kan gebruiken en niet echt een query uitvoert, vandaar de snelheid. Dat gezegd hebbende, rapporteert het niet altijd dezelfde waarde als een count-query die alle elementen zou moeten retourneren (het zal bijvoorbeeld niet zijn in shard-omgevingen met een hoge schrijfdoorvoer). Voor discussie of dat een bug is of niet. Ik denk van wel.
Merk op dat in 2.3+ een significante optimalisatie is geïntroduceerd die de prestaties van tellingen op geïndexeerde velden zou moeten verbeteren (en zal doen). Zie:https://jira.mongodb.org/browse/SERVER-7745