gpt4 book ai didi

postgresql - 为什么使用 PSQL 的偏移量分页有意义?

转载 作者:行者123 更新时间:2023-11-29 14:25:09 24 4
gpt4 key购买 nike

我一直在研究使用 PSQL dbms 进行分页(按时间戳分页)。我目前的做法是建立一个b+索引,以大大降低寻找下一个 block 开始的成本。但是我在教程和 NPM 模块(如 express-paginate(https://www.npmjs.com/package/express-paginate))中到处查看,人们似乎以一种或另一种方式使用偏移量获取 block ,或者无论如何获取所有数据,但只是简单地以 block 的形式发送它们,这对我来说并没有似乎是分页的完整优化。

我可以看到他们仍在通过延迟加载和流式传输 block 来进行优化(从而节省带宽和客户端的任何下载/处理时间),但是由于 psql 上的偏移量仍然需要扫描以前的行。在用户想要查看所有数据的最坏情况下,这种方法不会产生非常高的服务器成本,因为如果你有 n 个 block ,你将访问第一个 block n 次,第二个 block n-1次,第三 block n-2 次,等等。我知道这实际上是在 IO 方面,所以它并不那么昂贵,但它仍然困扰着我?

我是否遗漏了一些非常明显的东西?我觉得我是,因为似乎有更多成熟和经验丰富的工程师似乎在使用这种方法。我猜我的理解中缺少方程式或机制的某些部分。

最佳答案

不,你很清楚这一点。

为什么这么多人和工具仍然提倡使用 OFFSETLIMIT(或 FETCH FIRST n ROWS ONLY,使用标准的语言)是他们对数据库了解不多。 LIMITOFFSET 很容易理解,即使“索引”一词对您来说除了“书的最后几页”之外没有其他含义。

还有一个原因:要实现键集分页,您的查询中必须有一个 ORDER BY 子句,该 ORDER BY 子句必须包含一个唯一的列,并且您必须创建一个支持该排序的索引。

此外,您的数据库必须能够处理类似的情况

... WHERE (name, id) > ('last_found', 42)

并支持对它们进行多列索引扫描。

由于许多工具都力求支持多个数据库系统,因此它们可能会选择适用于大多数数据库系统上的每个查询的简单但效率低下的方法。

关于postgresql - 为什么使用 PSQL 的偏移量分页有意义?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58632378/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com