使用PostgreSQL

时间:2017-01-08 18:24:02

标签: sql postgresql perl

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

例如,

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

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

3 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分:0)

分页?

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

对不起,如果我误解了。

答案 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]