使用包含近7m的大型记录的Postgres表。我知道SELECT * FROM table
足够大,可以容纳在内存中,因此在等待查询结果很长时间后(只能执行SELECT * FROM table LIMIT n
),数据库连接丢失了。
我需要处理每条记录,直到最后一条。这是怎么做的?
答案 0 :(得分:2)
您可以获取n条记录的大块。
select * from table where tableId>currentTableId and tableId<currentTableId*chunk_size
说明:
假设您有100条记录,而您的内存一次包含10条记录。
您从应用程序(任何ORM)中查询要执行10次
int totalRecords = executeQuery('select count(*) from table');
int chunkSize = 10;
int chunks = totalRecords/chunkSize ;
while(chuks>0){
executeQuery('select * from table where tableId>currentTableId and tableId<currentTableId*chunkSize ');
chunk-=chunkSize;
}
此代码非常抽象。只是对您的提示。