我有一张超过一百万条的表。我将所有这些数据放入perl并将其存储到变量中($ query =“SELECT * FROM table1”。现在的问题是我使用了大量资源(主要是内存)。鉴于我的perl新手状态和postgres,我如何将该查询转换为块或部分?
例如,
$query = "SELECT * FROM table1 LIMIT 100000";
将100K结果放入$ query。 table1的大小为10M记录。我如何对其进行转换,以便在查询完成之前一次只将100K结果存储到$ query中?
答案 0 :(得分:1)
首先,您真的需要所有10M记录吗?不要这么认为,因此只检索你要完成的工作的记录。其次,你真的需要所有列数据吗?可能不是,在这种情况下,只选择需要select col1, col2, col3 ... from table
而不是select *...
的列。因为,获取所有数据并填满服务器的内存毫无意义。
在最坏的情况下,如果您所说的是您实际需要的东西,那么除了检索所有记录之外别无他法。您可以实现分页以批量获取数据,而不是一次性获取所有数据。
答案 1 :(得分:0)
答案 2 :(得分:0)
技巧:
您可以将模量用于块数据
例如:
您要从1000条记录中获取块数据,请使用seq id将块数据分为4条 您只需模数序列ID数据4,
SELECT *
FROM input_data_control b
WHERE b.bill_schedule_month = '201910'
AND mod(input_data_control_id, 4) = [1...4]