gpt4 book ai didi

sql - Postgres 对 FTS 查询进行分页

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

对 FTS 查询进行分页的最佳方法是什么? LIMITOFFSET 浮现在脑海中。但是,我担心通过使用 limit 和 offset 我会一遍又一遍地运行相同的查询(即,一次用于第 1 页,另一次用于第 2 页......等等)。

PostgreSQL 是否足够智能以透明地缓存查询结果?因此随后满足来自缓存的分页查询?如果没有,我该如何有效地分页?

编辑

该数据库用于单用户桌面分析。但是,如果这是一个实时 OLTP 应用程序,我仍然想知道最好的方法是什么。我在过去使用 SQL Server 解决了这个问题,方法是创建一组有序的文档 ID,并将针对 ID 的查询参数缓存在一个单独的表中。每隔几个小时清除一次缓存(以便让新文档进入结果集)。

也许这种方法对于 postgres 是可行的。但我仍然想知道数据库中存在的机制以及如何最好地利用它们。如果我是数据库开发人员,我会启用查询-响应缓存以与 FTS 系统一起工作。

最佳答案

服务器端 SQL 游标可以有效地用于此如果客户端 session 可以绑定(bind)到在整个 session 期间保持打开的特定数据库连接。这是因为游标不能在不同的连接之间共享。但如果它是一个桌面应用程序,每个运行的实例都有一个唯一的连接,那很好。

DECLARE CURSOR 的文档解释了当游标在提交的事务中被声明为 WITH HOLD 时,结果集将如何具体化。

锁定 根本不应该是一个问题。如果在游标已经具体化时修改数据,则不会影响读取器也不会阻止写入器。

除此之外,PostgreSQL 中没有隐式查询缓存。 LIMIT/OFFSET 技术意味着对每个页面重新执行查询,这可能与初始查询一样慢,具体取决于执行计划的复杂性和缓冲区缓存和磁盘缓存的有效性。

关于sql - Postgres 对 FTS 查询进行分页,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12092343/

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