【问题标题】:MongoDb index intersection usageMongoDb 索引交集使用情况
【发布时间】:2014-09-16 12:02:54
【问题描述】:

我无法理解 MongoDB 对我的查询做了什么。我的文档几乎只包含数组字段,使我无法使用复合索引。 每个字段都使用 ensureIndex({FieldName:1}) 进行索引

查询是这样连接的:

{$and: [{FIELD1:"field1Val"},{FIELD2:"field2Val"},{FIELD3:"field3Val"}]}

如果我运行这个查询,MongoDB 似乎只使用一个索引。 为什么 MongoDB 不并行使用所有索引,然后将它们相交?

Lucene 解决的同样问题比我现在的 MongoDB 实现快 8 倍。

【问题讨论】:

  • 这可能无关紧要,但你不需要在那里使用$and。只需将其设为{FIELD1: 'field1Val', FIELD2: 'field2Val', FIELD3: 'field3Val'},优化器可能会做得更多。
  • 我支持 JohnnyHK 删除 $and,因为它没有帮助。此外,您的文档中主要包含数组是非常可疑的。如果您在性能方面遇到问题,能否发布示例文档、查询和查询说明?

标签: mongodb indexing intersection


【解决方案1】:

(在 v2.6 之前,MongoDB 的一个众所周知的限制是每个查询只能使用一个索引,除了一些使用 $or 的特殊情况

为了提高查询速度,您可以使用hint() 来强制使用索引。选择最有选择性的索引。)

正如 cmets 所说,它不再是真的。使用索引交集。看来你最多可以使用 2 个相交的索引。见:When are Compound Indexes still relevant in MongoDB 2.6, given the new Index Intersection feature?

@JohnnyHK Ty 对于 cmets,它让我学到了新东西。

【讨论】:

  • 这不再适用,因为 2.6 支持 index intersection
  • 正如@JohnnyHK 所说,这不再是真的
猜你喜欢
  • 2014-08-21
  • 2014-10-05
  • 1970-01-01
  • 1970-01-01
  • 2015-08-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多