为什么不将集合的所有属性都定义为索引?

时间:2018-12-04 08:22:28

标签: database mongodb indexing

如我所见,在执行executionStats命令之后,接着执行MongoDB查找查询,如下所示:

db.users.find({some_index: "hello"}).explain("executionStats")

我收到的数据复杂度为O(1),因为我已经预先定义some_index是mongo中的索引-使用db.users.createIndex("some_index": 1)

那很好,但是为什么不将所有键都定义为索引呢?

2 个答案:

答案 0 :(得分:2)

索引的优势:

  • 快速阅读查询
  • 更好的响应时间
  • 帮助使行唯一或没有重复

索引的缺点:

  • 索引占用额外的磁盘空间。
  • 索引占用RAM
  • 它们会降低插入,更新和删除的性能。

因此,随着集合索引的数量增加,它将降低写入性能。因此,应在查询最多的字段或字段集合上创建它。

答案 1 :(得分:1)

  

为什么不将所有键都定义为索引?

可以,但是索引会

  1. 占用磁盘和RAM。
  2. 慢写。

如果您有足够的硬件来扔它,请继续。但是为什么要创建和维护您可能不需要的索引?