[英]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 *...
。 因为,获取所有数据并填满服务器的内存是没有意义的。
在最坏的情况下,如果您所说的正是您真正需要的,那么您除了检索所有记录之外别无他法。 您可能可以实现分页以批量获取数据,而不是一次获取所有数据。
诡计 :
您可以对块数据使用模数
例如:
您想要来自 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.