0

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

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

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

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

我们正在使用 MongoMapper。

谢谢!

4

1 回答 1

1

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

从概念上讲,我发现最好考虑索引中的附加字段,以便从查询中修剪更小的子树。第一个范围切断了一个大分支,第二个更小,第三个更小,依此类推。我的一般经验法则是索引中查询的第一个范围是有价值的。

该规则需要注意的是,索引中的其他字段可用于帮助对返回的结果进行排序。

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

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

抢。

于 2013-03-27T02:06:48.193 回答