0

这是一个很具体的问题。

假设 - 我们有一个大型文档的集合,每个文档都有大量数据,并且我们没有额外的索引。

所以,当我像这样查询时,{field_name: "test_value"}它只是从上到下查看所有文档,试图找到必要的字段,然后检查它的值(如全文搜索),或者它可能有一些优化,比如存储文档元数据,或按字母顺序排列文档中的字段,或者可能是其他一些内部文档优化???(如哈希表、一些索引等)

因为如果我们有一个 16mb 的原始文本数据,那么就需要查看所有文档以试图找到必要的密钥——这可能会很耗时。

4

1 回答 1

1

如果您没有任何索引(除了您始终拥有的 _id 之外) - 这是一个没有优化的完整扫描(您称之为哈希表的优化,一些索引,一些元数据实际上是为加快查询而创建的索引)。可能是 16 Mb 不会像您想象的那么耗时,但是如果没有索引,它将遍历所有文档(除非您正在执行 findOne 或 limit 并且您很幸运并在一开始就获得了那些 1 个或几个元素)一个一个并尝试匹配一个模式。

因为人们对这个 O(n) 速度不满意,所以他们想出了索引的想法。

于 2013-11-05T10:34:53.037 回答