鉴于新的索引交集功能,复合索引何时在 MongoDB 2.6 中仍然相关?

Posted

技术标签:

【中文标题】鉴于新的索引交集功能,复合索引何时在 MongoDB 2.6 中仍然相关?【英文标题】:When are Compound Indexes still relevant in MongoDB 2.6, given the new Index Intersection feature? 【发布时间】:2014-04-13 15:58:31 【问题描述】:

Mongo 2.6 引入了Index Intersection。在我看来,无论使用复合索引可以实现什么,都可以使用索引交集更轻松地实现,并且具有更大的灵活性(因为它可以支持更多类型的查询)。 但是,Mongo 的文档说:

索引交集并没有消除创建复合索引的需要。 (Link)

然后继续解释使用复合索引相对于索引交集的缺点。我不明白使用这样的索引而不是让 mongo 与多个索引相交来完成查询的优势是什么。


编辑:我建议阅读他的答案中提供的link@Sammaye,以详细解释 Mongo 的开发人员 David Storch 对索引交集与复合索引的关系。底线:

索引交集不应被视为复合索引的替代品

【问题讨论】:

【参考方案1】:

需要回答的几点可能是:

索引交叉仅限于一次两个索引:(https://jira.mongodb.org/browse/SERVER-3071)

索引交点默认开启。查询规划器目前一次将自身限制为 2 个索引,但将来此限制可能会增加。

索引交集不是复合索引的替代品,而只是像$where 一样在您别无选择时使用。索引交集不是在集合中查找文档的最快方式,也不是最具可扩展性的方法,因此您必须注意使用了多少交集。

还需要注意的是,MongoDB 可以与哪些索引相交存在限制:http://docs.mongodb.org/manual/core/index-intersection/#index-intersection-and-sort

【讨论】:

以上是关于鉴于新的索引交集功能,复合索引何时在 MongoDB 2.6 中仍然相关?的主要内容,如果未能解决你的问题,请参考以下文章

mongodb AND查询遇到多个index时候可能会做交集——和复合索引不同

mongod 索引2

MongoDB——索引类型之复合索引(Compound Index)

MongoDB——索引类型之复合索引(Compound Index)

SQL Server的复合索引学习转载

MySQL 在添加新的复合索引时是不是会在表上获得锁?