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

我应该在mongodb中为这个不同的命令使用哪个索引,mongodb,distinct-values,Mongodb,Distinct Values,我想尽快得到满足给定查询的字段c.h(集合中条目的字段c中包含的子文档的字段h)的所有不同可能值的数目:{p:[a_int],r:[a_bool]} 我的第一个GES是索引: {p:1,r:1,“c.h:1} 对吗?你会正确使用它吗 我正在使用Mongo2.0.1 编辑:我在一个网站上发现,您可以获取查询的统计信息。但是,它仅在副本集上使用时有效(而不是在分片中从mongos运行时)。查询似乎至少正确地使用了{p:1,“c.h”:1}上的索引,因此我将尝试使用完整索引 EDIT2:完整索引的效果

我想尽快得到满足给定查询的字段c.h(集合中条目的字段c中包含的子文档的字段h)的所有不同可能值的数目:{p:[a_int],r:[a_bool]}

我的第一个GES是索引: {p:1,r:1,“c.h:1}

对吗?你会正确使用它吗

我正在使用Mongo2.0.1

编辑:我在一个网站上发现,您可以获取查询的统计信息。但是,它仅在副本集上使用时有效(而不是在分片中从mongos运行时)。查询似乎至少正确地使用了{p:1,“c.h”:1}上的索引,因此我将尝试使用完整索引

EDIT2:完整索引的效果与预期的一样好。

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

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

当然,您的切分键将在这里产生重大影响,基于该键的数据分布很可能最终成为您的限制因素(数据局部性胜过分散/聚集方法)