我应该在mongodb中使用哪个索引来处理这个不同的命令

时间:2012-03-09 08:16:00

标签: mongodb distinct-values

我希望尽可能快地获得满足给定查询的字段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:完整索引按预期效果更好。

1 个答案:

答案 0 :(得分:1)

如果在分片环境中,explain()不适用于您的distinct,您可以采用“强力”方法。使用hint()显式指定要测试的索引,然后比较结果:

http://www.mongodb.org/display/DOCS/Optimization#Optimization-Hint

除了消除对使用的索引的疑问之外,它还意味着您不等待优化器尝试新的查询计划(它将在一段时间内缓存查询的第一个选择的索引)。

当然,您的分片密钥会对此产生重大影响,并且基于该密钥的数据分发可能最终成为您的限制因素(数据位置胜过分散/聚集方法)。