0

我需要一些关于如何正确设置 w/mongodb 索引的建议。

假设我的数据收集是这样的:

球员

 - age
 - scores
 - fouls
 - yellow cards
 - red cards
 - offsides

我的问题是我的潜在查询可以涵盖所有索引组合,例如:

Get players that age < 30 and yellow card > 3
Get players that age < 30 and yellow card > 3 and red_cards >6
Get players that age < 30 and red_cards card > 3 and scores > 2
Get players that scores < 30 and yellow card > 3 and fouls < 6 and red_cards >2
Get players that scores < 30 and yellow card > 3 and fouls < 6 and red_cards >2 and age > 25

在这种情况下分配我的索引的最佳方法是什么?如果我的集合有 6 个字段,就像我的示例中一样,我需要 36 个索引吗?或者每个索引有一个字段会是更好的选择吗?

4

1 回答 1

0

这个问题的答案取决于您的集合大小、查询率、不同类型查询的分布(具有某些参数集的查询比其他查询具有更高的速率)等。

如果您的集合大小小于 100k(例如)文档,您可以确信您的所有查询都会很快,即使它们不使用索引并且一直进行顺序扫描。

另一方面,如果每秒有 1000 个这样的查询,它将无法按预期工作,在这种情况下,您必须使用 profiler( system.profile ) 来确定不同类型查询的分布。当你得到这个分布时,很明显你应该创建哪些索引。

您的主要目标应该是减少您阅读以满足查询的数据量(索引+文档)。

最后,您可以通过创建MongoDB ReplicaSet来增加读取吞吐量。

于 2013-08-30T11:38:49.917 回答