【问题标题】:How fast is it to look up by ObjectId in Mongodb?在 Mongodb 中通过 ObjectId 查找有多快?
【发布时间】:2011-09-27 00:08:37
【问题描述】:

我到处查找 ObjectId,好像它们是蛋糕一样。

这样好吗? _id 字段应该被疯狂查找,对吧?

【问题讨论】:

  • 当然,这个问题只有在查找速度与某些其他类型的查找相关时才有意义,例如字符串字段上的索引,或唯一字符串或整数字段上的索引,还是非索引字段?

标签: indexing mongodb querying


【解决方案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)。点。
      • 是的,“常数”后面没有“时间”这个词。
      猜你喜欢
      • 2019-09-08
      • 2013-02-06
      • 2015-06-08
      • 2021-01-06
      • 2017-12-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多