2

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

我的第一个 gess 是索引: {p:1, r: 1, "ch" : 1 }

这是正确的吗 ?distinct 会正确使用它吗?

我正在使用 mongo 2.0.1

编辑:我在jira 票上发现您可以获得查询的统计信息。但是,它仅在用于副本集时才有效(而不是从分片中的 mongos 运行时)。该查询似乎用于正确使用 {p:1, "ch" : 1 } 上的至少一个索引,因此我将尝试使用完整索引。

EDIT2:完整索引按预期工作得更好。

4

1 回答 1

1

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

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

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

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

于 2012-03-09T10:52:58.627 回答