使用Mongo:我们应该创建一个针对每种类型的高容量查询量身定制的索引吗?

时间:2013-03-27 00:49:07

标签: mongodb indexing mongomapper

我们有两种类型的高容量查询。一个人查找涉及5个属性的文档:日期(lte),存储在数组中的值,存储在第二个数组中的值,一个整数(gte)和一个float(gte)。

第二个包括这五个属性加上另外两个属性。

我们应该创建两个复合索引,每个查询一个吗?假设每个属性都具有高基数。

如果我们这样做,因为每个查询涉及多个数组,因为Mongo的限制,我们似乎不能创建索引。在这种情况下,人们如何构建他们的Mongo数据库?

我们正在使用MongoMapper。

谢谢!

1 个答案:

答案 0 :(得分:1)

查询中第一个范围之后的查询索引,其他索引字段的值显着下降。

从概念上讲,我发现最好考虑索引中的添加字段修剪查询中较小的子树。第一个范围剔除一个大分支,第二个范围越小,第三个范围越小,等等。我的一般经验法则只是索引中查询的第一个范围是有价值的。

该规则的警告是索引中的其他字段可用于帮助对返回的结果进行排序。

对于第一个查询,我将在两个数组值上创建一个索引,然后哪个范围将排除大多数文档。除非您可以关闭范围(lte和gte),否则日期字段不太可能提供高排除。在不知道域的情况下很难判断整数和浮点数。

如果第二个查询的两个附加属性也在查询中使用范围并且没有明显更高的排除值,那么我只使用一个索引。

罗布。