Postgres 选择带有偏移量的查询,用于处理时间过长的大型表



为了处理一个有 300 万行的表,我在 psql 中使用以下查询:

select id, trans_id, name
from omx.customer 
where user_token is null 
order by id, trans_id l
imit 1000 offset 200000000

获取数据需要 3 分钟以上。如何提高性能?

您遇到的问题是,要知道要获取数据库的 1000 条记录实际上必须获取所有 200000000 条记录来计数它们。

解决此问题的主要策略是使用 where 子句而不是偏移量。

如果您知道前面的 1000 行(因为这是某种迭代使用的查询(,则可以改为从该集合的最后一行获取 id 和trans_id,并获取其后的 1000 行。

如果 200000000 的数字不需要精确,并且您可以很好地猜测从哪里开始,那么这可能是解决问题的途径。

最新更新