MongoDB中唯一索引的优势

Posted

技术标签:

【中文标题】MongoDB中唯一索引的优势【英文标题】:Advantage of a unique index in MongoDB 【发布时间】:2012-09-03 06:31:31 【问题描述】:

我尝试搜索 Mongo 文档,但无法真正找到有关唯一索引查询是否比非唯一索引查询更快的任何详细信息(给定相同的数据)

所以我知道唯一索引将具有高选择性和良好的性能。但是,给定两个连接唯一的字段,非唯一复合索引的执行速度会比唯一复合索引慢吗?

我假设唯一索引会减慢插入速度,因为必须验证唯一性。但是,唯一索引的读取性能提升(如果有的话)真的值得吗?

【问题讨论】:

你得到了明确的答案吗?我正在做一些批量更新(3,000,000+ 次操作)并且使用 _id 以外的索引速度非常慢。许多数量级。我正在使用 2d(非唯一,但可能是)地理位置索引来作为更新的基础。我将再次尝试使地理位置索引独一无二,看看是否能提高性能。 【参考方案1】:

源树的快速 grep 似乎表明唯一索引仅在插入时使用,因此返回一个文档的查询之间不应该有任何性能优势或损害,无论索引是否唯一。

MongoDB 索引是作为 btree 实现的,因此无论索引是否唯一,它们执行任何不同的操作都没有任何逻辑意义。

【讨论】:

谢谢,虽然我在扫描唯一索引 btree 时能想到的一个区别是您可以在找到第一个匹配项后停止扫描.. 所以在这种情况下,它可能具有“逻辑意义”执行(稍微)更快?我还注意到,当您说“返回一个文档”时,您暗示在查询中指定了限制 (1),在这种情况下,使用此逻辑不会有任何区别。【参考方案2】:

我对该主题进行了自己的小型研究。我在一个集合中生成了 500,000 条记录(随机生成的字符串),并使用 explain() 语句尝试了几个查询。

然后我确保了唯一索引,并再次尝试了一些其他查询:

如您所见,添加索引后,时间消耗从约 276 毫秒减少到 0 毫秒!所以看起来即使索引是唯一的,它也会(以积极的方式)影响查找查询。

【讨论】:

我正在寻找唯一索引和非唯一索引之间的比较。不是唯一索引和无索引之间的比较。 哦,我明白了。这是我的误解:)

以上是关于MongoDB中唯一索引的优势的主要内容,如果未能解决你的问题,请参考以下文章

MongoDB - 唯一索引与复合索引

mongoDB 3.2中的唯一索引忽略空值

在 MongoDB 中添加唯一索引忽略空值

MongoDB——索引属性之唯一索引(Unique Indexes)

MongoDB——索引属性之唯一索引(Unique Indexes)

MongoDB 创建基础索引组合索引唯一索引以及优化