Mongodb 复合索引的最小值

Mongodb 复合索引的最小值,mongodb,indexing,Mongodb,Indexing,以Mongo的例子为例: 是否有比简单排列更好的最小#索引来支持项目、位置和库存的任何“精确匹配”查询组合 编辑 为了解决上面缺少的索引,我可以添加位置,库存,位置库存,以及项目库存索引。注意,最后2个是复合索引,用于处理我的问题中列出的所有查询 但是,当尝试处理N个字段的所有置换时,是否有一个一般规则 我可以添加位置,库存,位置库存,以及项目库存索引。注意,最后2个是复合索引,用于处理我的问题中列出的所有查询 如果您有位置股票,则不需要单独的位置索引 你可能想看。索引交集将解决这个问题。在2.

以Mongo的例子为例:

是否有比简单排列更好的最小#索引来支持项目、位置和库存的任何“精确匹配”查询组合

编辑

为了解决上面缺少的索引,我可以添加
位置
库存
位置库存
,以及
项目库存
索引。注意,最后2个是复合索引,用于处理我的问题中列出的所有查询

但是,当尝试处理N个字段的所有置换时,是否有一个一般规则

我可以添加
位置
库存
位置库存
,以及
项目库存
索引。注意,最后2个是复合索引,用于处理我的问题中列出的所有查询

如果您有
位置股票
,则不需要单独的
位置
索引

你可能想看。索引交集将解决这个问题。在2.5分支中,已设置了此选项

一般来说,加入(几乎)所有置换是不可行的,因为置换的数量是
N,因此4个字段有24个索引,5个字段有120个索引

确保您的索引选择性良好。这在很大程度上取决于数据(即关系如何分布)和应用程序(您需要的查询),这使得讨论变得棘手

例如,假设一个典型的客户有5000件库存,但没有人拥有超过5个地点。在这种情况下,
位置
索引可能没有太大帮助。最坏的情况是查询特定位置中的所有项。DB必须查看25k个文档才能返回5k个结果

这不是很有效,但是用户不太可能经常查询整个列表。对于只想显示第一页的典型应用程序,此查询的有效性将取决于插入顺序和主键的类型:如果文档具有随机键,db将必须扫描
5n
文档才能平均返回
n
结果。但是,如果主键是单调的,并且数据是逐位置插入的,那么db可能必须扫描并跳过20k个元素才能找到第一个结果


因此,一个很长的答案是:索引是一个工具,必须根据您需要的数据和查询进行仔细调整,因此没有一个通常适用的最小界限对实际用途有帮助。

您不能解决这个问题吗?Sammaye,你只是想让我们帮你做数学题,这似乎很简单。谢谢。不要以这种方式存储数据——您需要存储更多的“键/值/类型”,以减少可能需要的索引排列数。@wiredparie,请进一步解释。我不懂。我也不懂。:)我在脑海中混合了另一个数据库的功能,作为我正在考虑的解决方案的一部分,使之成为邪恶/不可能的混合。所以,没关系。
Example Given the following index:
{ "item": 1, "location": 1, "stock": 1 }
MongoDB can use this index to support queries that include:   

 - the item field, and
 - the item field and the location field, and
 - the item field and the location field and the stock field.

MongoDB cannot use this index to support queries that include:


 - only the location field,
 - only the stock field,
 - only the location and stock fields, and
 - only the item and stock fields.