【发布时间】:2011-09-27 00:08:37
【问题描述】:
我到处查找 ObjectId,好像它们是蛋糕一样。
这样好吗? _id 字段应该被疯狂查找,对吧?
【问题讨论】:
-
当然,这个问题只有在查找速度与某些其他类型的查找相关时才有意义,例如字符串字段上的索引,或唯一字符串或整数字段上的索引,还是非索引字段?
我到处查找 ObjectId,好像它们是蛋糕一样。
这样好吗? _id 字段应该被疯狂查找,对吧?
【问题讨论】:
_id 是主键。它已编入索引。当然很快。
【讨论】:
_id 字段的索引由 mongo 和默认主键自动创建。 Speedwise,通过 _id 字段访问文档会非常快。
你有什么顾虑?
【讨论】:
ObjectIds,如果您的主要数据访问方法,将是从 MongoDB 检索您的资料的最快方法。我们利用 MongoDB 作为大部分数据访问的密钥存储库。做你正在做的事情会有很好的结果。
【讨论】:
更准确的答案:MongoDB 使用 B-Tree 索引。在 B-Tree 中搜索特定值在平均和最坏情况下具有 O(log n) 复杂度,这可以被认为是相当快的(即二进制搜索)。虽然它不是恒定的复杂性 = O(1),因此如果索引大小增长大于可用 RAM,您仍然可能会产生一些减速效果。 (MongoDB 会尝试将索引保存在 RAM 中,并且在磁盘上查找索引所需的每个 IO 都会大大减慢您的查询速度。
【讨论】: