Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/postgresql/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Postgresql Postgres选择带有偏移量的查询,以处理占用太多时间的大型表_Postgresql - Fatal编程技术网

Postgresql Postgres选择带有偏移量的查询,以处理占用太多时间的大型表

Postgresql Postgres选择带有偏移量的查询,以处理占用太多时间的大型表,postgresql,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分钟以上的时间。如何提高性能?您遇到的问题是,要知道要获取数据库中的哪1000条记录,实际上必须获取所有20000000条记录才能对它们进行计数 解决这个问题的主要策略是使用whe

为了处理一个有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条记录,实际上必须获取所有20000000条记录才能对它们进行计数

解决这个问题的主要策略是使用where子句而不是offset

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

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