MongoDB中唯一索引的优势

15

我尝试查阅Mongo文档,但无法找到关于独特索引查询是否比非独特索引查询更快的详细信息(在相同数据情况下)。

我理解独特索引具有较高的选择性和良好的性能。但是,如果给定两个字段它们的连接是唯一的,非独特复合索引是否比独特复合索引执行速度慢?

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


你对此问题得到了明确的答案吗?我正在进行一些批量upserts(3,000,000+操作),并且使用除_id之外的索引比较慢。相差很多个数量级。我使用了一个2d(非唯一,但可以)地理位置索引来基于更新。我将尝试再次使地理位置索引唯一,并查看是否可以提高性能。 - ephemer
我同意你的观点,使用不同的算法来创建唯一索引是有道理的。然而,他们并没有这样做。我还向MongoDB的解决方案架构师之一询问过,他说在搜索性能方面没有区别。 - madarinho
2个回答

20

快速grep源代码树似乎表明唯一索引仅用于插入,因此无论索引是否唯一,在返回一个文档的查询之间都不应该有任何性能优劣之分。

MongoDB索引实现为B-Tree,因此它们在索引是否唯一的情况下没有逻辑上的差别。


7
谢谢,虽然我能想到的唯一差异是在扫描唯一索引B树时,当找到第一个匹配项后就可以停止扫描。因此,在这种情况下,执行速度可能会更快,逻辑上是有意义的。我还注意到,当你说“返回一个文档”时,暗示查询中指定了限制(1),在这种情况下,使用这种逻辑没有差异。 - Zaid Masud

0

我对这个主题进行了自己的小研究。我在一个集合中生成了500,000条记录(随机生成的字符串),并尝试了一些带有explain()语句的查询。db.test.find() with no indexes

然后我确保了唯一索引,并再次尝试了几个查询:db.test.find() with unique index

正如您所看到的,添加索引后,时间消耗从约276毫秒降至0毫秒!因此,即使索引是唯一的,它也会以积极的方式影响查找查询。


10
我在寻找一个唯一索引和非唯一索引之间的比较,而不是唯一索引和无索引之间的比较。 - Zaid Masud
哦,我明白了。这是我的误解 :) - ecdeveloper

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接