我学到很多东西关于索引并从中找到一些东西 这里enter link description here
索引支持在MongoDB中高效执行查询。没有 索引,MongoDB必须执行收集扫描,即每次扫描 集合中的文档,用于选择与之匹配的文档 查询语句。如果查询存在适当的索引,则为MongoDB 可以使用索引来限制它必须检查的文档数量。
我有一些查询:
在默认ID(_id)的情况下会发生什么。始终存储在RAM中。
_id是默认索引,这意味着所有记录始终存储在特定集合的RAM中?
如果我错了,请帮助我。 谢谢
答案 0 :(得分:4)
我想,你知道索引存储在RAM中。如果我说他们不是,那该怎么办?
首先,我们需要了解什么是索引,索引基本上是一个指示器,告诉磁盘该文档在哪里。就像我们在书中编制索引一样,为了更快地访问,我们可以看到哪个主题在哪个页码上。
因此,当创建索引时,它们也存储在磁盘中,但是当应用程序运行时,基于频繁使用甚至更快的访问,它们被加载到RAM中,但加载和创建之间存在差异。
加载索引与将一个或多个记录加载到RAM中的方法不同。如果我们加载索引,我们知道从磁盘中获取所有文档的内容,不像加载所有文档并验证它们中的每一个。所以索引避免了收集扫描。
索引的创建是一次性过程,但是文档上的每次写入都可能会改变索引,因此某些部分可能需要重新计算,因为记录可能会根据数据的变化进行洗牌。这就是为什么索引使写入变慢和快速读取的原因。
再次将其视为一本书,如果您在本书之间添加说明2页的新主题,则需要重新计算该主题编号之后的所有索引。因此。
创建索引时使用(createIndex),Is Record始终存储在RAM中 ?
每当我的应用程序进入时,是否每次都需要创建索引 重启?
在默认ID(_id)的情况下会发生什么。总是存储在 RAM。
_id是默认索引,这意味着所有记录始终存储在特定集合的RAM中吗?
答案 1 :(得分:0)
从标题回答问题: MongoDB 索引使用B 树数据结构。
来源:https://docs.mongodb.com/manual/indexes/index.html#b-tree