首页 > 解决方案 > 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 分钟以上。如何提高性能?

标签: postgresql

解决方案


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

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

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

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


推荐阅读