0

MongoDB 的文档中指出,使用带有大偏移量的 skip() 很慢。

skip() 方法要求服务器在开始返回结果之前从输入结果集的开头开始扫描。随着偏移量的增加,skip() 将变得更慢。

假设我们排序的字段上有一个索引,为什么 MongoDB 不能直接“跳转”到正确的位置?例如,如果我们有一个排序数组,我们可以得到 O(1) 中的第 100 项。为什么数据库不能做同样的事情?

据我了解,SQL 数据库中的 OFFSET/LIMIT 会发生完全相同的事情,因此我将非常感谢涵盖这两种情况的答案。

4

1 回答 1

1

索引不作为数组存储在磁盘/内存中。它们存储为类似于链表的树。

因此,正如您所说,不可能“跳到正确的地方”。

请注意,文档并没有说服务器迭代文档,而是迭代结果集。理论上,这可以通过索引扫描来完成。

于 2021-07-12T21:18:00.137 回答