MongoDB中唯一索引的优势

MongoDB中唯一索引的优势,mongodb,unique-index,mongodb-indexes,Mongodb,Unique Index,Mongodb Indexes,我曾尝试搜索Mongo文档,但实际上找不到关于唯一索引的查询是否比非唯一索引的查询快(给定相同数据)的任何详细信息 所以我知道一个独特的索引将具有高选择性和良好的性能。但是,如果两个字段的连接是唯一的,那么非唯一复合索引的执行速度会比唯一复合索引慢吗 我假设唯一索引可以减慢插入速度,因为必须验证唯一性。但是唯一索引(如果有的话)的读取性能改进真的值得吗?源树的快速grep似乎表明唯一索引仅在插入时使用,因此返回一个文档的查询之间不应该有任何性能优势或劣势,无论该索引是否唯一 MongoDB索引是

我曾尝试搜索Mongo文档,但实际上找不到关于唯一索引的查询是否比非唯一索引的查询快(给定相同数据)的任何详细信息

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


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

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


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

我在这个主题上做了自己的小研究。我在一个集合中生成了500000条记录(随机生成的字符串),并使用explain()语句尝试了几个查询

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


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

谢谢,尽管扫描唯一索引树时我能想到的一个区别是,在找到第一个匹配项后,您可以停止扫描。。那么,在这种情况下,执行(稍微)快一点可能是“合乎逻辑的”?我还注意到,当您说“返回一个文档”时,意味着在查询中指定了限制(1),在这种情况下,使用此逻辑不会有任何区别。不是唯一索引和无索引之间的比较。哦,我明白了。这是我这边的误解:)你得到了明确的答案吗?我正在做一些批量升级(3000000多个操作),使用除_id之外的索引速度要慢得多。许多数量级。我使用了一个2d(非唯一的,但可能是)地理位置索引作为更新的基础。我将再次尝试使地理位置索引唯一,看看是否有性能改进。