我希望尽可能快地获得满足给定查询的字段ch(包含在集合中条目的字段c中的子文档的字段h)的所有不同可能值的数量:{ p:[a_int],r:[a_bool]}
我的第一个gess是索引: {p:1,r:1,“c.h”:1}
这是对的吗?会明确地使用它吗?
我正在使用mongo 2.0.1
编辑:我在jira ticket找到了您可以获得查询统计信息的信息。但是它仅在副本集上使用时才有效(而不是在分片中从mongos运行)。该查询似乎用于正确使用{p:1,“c.h”:1}上的索引,因此我将尝试使用完整索引。
EDIT2:完整索引按预期效果更好。
答案 0 :(得分:1)
如果在分片环境中,explain()不适用于您的distinct,您可以采用“强力”方法。使用hint()显式指定要测试的索引,然后比较结果:
http://www.mongodb.org/display/DOCS/Optimization#Optimization-Hint
除了消除对使用的索引的疑问之外,它还意味着您不等待优化器尝试新的查询计划(它将在一段时间内缓存查询的第一个选择的索引)。
当然,您的分片密钥会对此产生重大影响,并且基于该密钥的数据分发可能最终成为您的限制因素(数据位置胜过分散/聚集方法)。