繁体   English   中英

使用 PostgreSQL 分块 SELECT 查询

[英]SELECT query in chunks using PostgreSQL

我有一张表,里面有超过一百万个条目。 我将所有这些数据放入 perl 并将其存储到一个变量中 ($query = "SELECT * FROM table1"。现在的问题是我使用了大量资源(主要是内存)。鉴于我对 perl 的新手状态和 postgres,我将如何将该查询转换为块或部分?

例如,

$query = "SELECT * FROM table1 LIMIT 100000";

将 100K 结果放入 $query。 table1 的大小为 10M 记录。 我将如何转换它以便在查询完成之前一次只将 100K 结果存储到 $query 中?

首先,您真的需要所有 10M 记录吗? 不要这么认为,因此只检索您要完成的工作的记录。 其次,你真的需要所有列数据吗? 可能不是,在这种情况下,只选择需要的列,说select col1, col2, col3 ... from table而不是执行select *... 因为,获取所有数据并填满服务器的内存是没有意义的。

在最坏的情况下,如果您所说的正是您真正需要的,那么您除了检索所有记录之外别无他法。 您可能可以实现分页以批量获取数据,而不是一次获取所有数据。

分页?

也许这可能有用: https : //www.postgresql.org/docs/8.3/static/queries-limit.html

对不起,如果我误解了。

诡计 :

您可以对块数据使用模数

例如:

您想要来自 1000 条记录的块数据,使用 seq id 的块数据 4 块,您只需对 seq id 数据 4 进行模数,

SELECT *
  FROM input_data_control b
 WHERE  b.bill_schedule_month = '201910' 
        AND mod(input_data_control_id, 4) = [1...4]

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM