【问题标题】:Is it okay to have COLLSCAN for a collection with only few documents?可以对只有少量文档的集合进行 COLLSCAN 吗?
【发布时间】:2021-09-10 07:53:47
【问题描述】:

我有一个集合,其中只有两个文档,都用于跟踪某个计数。 我知道这永远不会有超过 2 个文档,但是当计数器值增加时,它使用 findAndModify 并显示 COLLSCAN。 我相信在这里有 COLLSCAN 是可以的,因为对他们的搜索键有一个索引不会带来任何性能优势,有什么想法吗?

【问题讨论】:

  • 您不需要索引来查询包含几个文档(甚至是几千个文档)的集合。有时,使用 COLLSCAN 的计划可以比使用 IXSCAN 的计划执行得更好(即使文档数量很多)。在存储、内存和性能方面(在插入和更新操作期间),对包含少量文档的集合进行索引只是一种开销。

标签: mongodb indexing


【解决方案1】:

索引并不总是好的。了解它们的工作原理的主要内容是:

  1. 索引使用内存来换取更好的性能。每次要使用索引时,都需要将其加载到 MongoDB RAM(如果还没有的话)。
  2. 当 Mongo 引擎收到查询时,它需要检查要使用的索引(如果有的话)并检查每个索引是否可以使用它(包含相关的查询参数,即查找、投影和排序的联合) .如果不是,Mongo 决定是使用它(最佳找到的索引)还是进行集合扫描(或两者兼而有之)。
  3. 索引需要处理 - 每个插入/更新/删除操作都需要更新索引。

使用索引有很多开销,因此好处应该比简单的集合扫描大几倍。您可以继续阅读here

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-06-27
    • 2016-08-20
    • 2010-12-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多