在 Mongodb 中通过 ObjectId 查找有多快?
Posted
技术标签:
【中文标题】在 Mongodb 中通过 ObjectId 查找有多快?【英文标题】:How fast is it to look up by ObjectId in Mongodb? 【发布时间】:2011-09-27 00:08:37 【问题描述】:我到处查找 ObjectId,好像它们是蛋糕一样。
这样好吗? _id
字段应该被疯狂查找,对吧?
【问题讨论】:
当然,这个问题只有在查找速度与某些其他类型的查找相关时才有意义,例如字符串字段上的索引,或唯一字符串或整数字段上的索引,还是非索引字段? 相关:***.com/questions/18680462/… 【参考方案1】:_id 是主键。它已编入索引。当然很快。
【讨论】:
你为什么说'主'键?我不相信 Mongo 中有主键和外键,只有索引。 从技术上讲,是的。来自词汇表:“_id 字段必须具有唯一值。您可以将 _id 字段视为文档的主键。”【参考方案2】:_id 字段的索引由 mongo 和默认主键自动创建。 Speedwise,通过 _id 字段访问文档会非常快。
你有什么顾虑?
【讨论】:
【参考方案3】:ObjectIds
,如果您的主要数据访问方法,将是从 MongoDB 检索您的资料的最快方法。我们利用 MongoDB 作为大部分数据访问的密钥存储库。做你正在做的事情会有很好的结果。
【讨论】:
【参考方案4】:更准确的答案:MongoDB 使用 B-Tree 索引。在 B-Tree 中搜索特定值在平均和最坏情况下具有 O(log n) 复杂度,这可以被认为是相当快的(即二进制搜索)。虽然它不是恒定的复杂性 = O(1),因此如果索引大小增长大于可用 RAM,您仍然可能会产生一些减速效果。 (MongoDB 会尝试将索引保存在 RAM 中,并且在磁盘上查找索引所需的每个 IO 都会大大减慢您的查询速度。
【讨论】:
没有什么能比得上“恒定的复杂性”。总体复杂度为 O(1)。点。 是的,“常数”后面没有“时间”这个词。以上是关于在 Mongodb 中通过 ObjectId 查找有多快?的主要内容,如果未能解决你的问题,请参考以下文章
Kotlin 数据类:如何为嵌入式文档生成 MongoDB ObjectId
如何在 mongo 控制台中通过 ObjectId 搜索对象?