MongoDb索引交叉点的使用

MongoDb索引交叉点的使用,mongodb,indexing,intersection,Mongodb,Indexing,Intersection,我很难理解MongoDB如何处理我的查询。我的文档几乎只包含数组字段,这使我无法使用复合索引。 每个字段都用ensureIndex{FieldName:1}索引 查询是按如下方式合并和连接的: {$and:[{FIELD1:field1Val},{FIELD2:field2Val},{FIELD3:field3Val}]} 如果我运行这个查询,MongoDB似乎只使用一个索引。 为什么MongoDB不并行使用所有索引,然后将它们相交 使用Lucene解决的同一问题的运行速度比我的MongoDB实

我很难理解MongoDB如何处理我的查询。我的文档几乎只包含数组字段,这使我无法使用复合索引。 每个字段都用ensureIndex{FieldName:1}索引

查询是按如下方式合并和连接的:

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

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


使用Lucene解决的同一问题的运行速度比我的MongoDB实现现在快8倍。

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

为了提高查询速度,可以使用hint强制执行所使用的索引。选择最有选择的索引

正如评论所说,这不再是事实。使用索引交点。看起来u最多可以使用2个相交索引。见:


@JohnnyHK Ty的评论,让我学到了新东西。

这可能没关系,但你不需要使用$and there。只要把它设为{FIELD1:'field1Val',FIELD2:'field2Val',FIELD3:'field3Val'},优化器就可以做更多的事情。我支持JohnnyHK删除$,因为它没有帮助。此外,文档中的大部分数组也很可疑。如果您在性能方面遇到问题,您可以发布一个示例文档、查询和查询解释吗?这不再是2.6支持的情况。正如@JohnnyHK所说,这不再是事实