鉴于新的索引交集功能,复合索引何时在 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时候可能会做交集——和复合索引不同
MongoDB——索引类型之复合索引(Compound Index)