【问题标题】:Why MongoDB skip() doesn't use indexes?为什么 MongoDB skip() 不使用索引?
【发布时间】:2021-09-21 23:49:56
【问题描述】:

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

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

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

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

【问题讨论】:

    标签: sql database mongodb performance query-optimization


    【解决方案1】:

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

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

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

    【讨论】:

    • 谢谢,我想我现在明白它的工作原理了。
    猜你喜欢
    • 2015-08-18
    • 1970-01-01
    • 1970-01-01
    • 2018-03-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多