Postgres为大表选择带偏移量的查询需要花费太多时间来处理

时间:2018-05-19 08:38:29

标签: postgresql

要处理一个有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分钟来获取数据。如何提高绩效?

1 个答案:

答案 0 :(得分:0)

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

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

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

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