我在具有 2 GB 内存的计算机上对 4.89 亿行 (102 GB) 运行以下查询:
select * from table order by x, y, z, h, j, l;
我使用 psycopg2 和服务器游标(“cursor_unique_name”)并一次获取 30000 行。
显然查询的结果不能保留在内存中,但我的问题是以下一组查询是否会同样快:
select * into temp_table from table order by x, y, z, h, j, l;
select * from temp_table
这意味着我将使用 temp_table 来存储排序结果并从该表中获取数据。
提出这个问题的原因是,如果使用 psql 手动运行,只需 36 分钟即可完成,但使用 psycopg2 执行查询时,需要 8 个多小时(从未完成)来获取前 30000 行。