Performance 如何在PostgreSQL 9.4中加速偏移量窗口

Performance 如何在PostgreSQL 9.4中加速偏移量窗口,performance,postgresql,indexing,Performance,Postgresql,Indexing,我正在将70M行从源表移动到目标表,并在另一端使用完整的转储和恢复它,这是不可取的。我决定创建一个小的SQL文件,一次选择1M行,并将这些行插入到新表中(经过一些清理)。问题是,我需要用1M块遍历70M行,我才意识到每次迭代都越来越慢 有没有办法创建一个部分索引来加速具有偏移量0限制1000000、偏移量1000000限制1000000等的查询 例如: 快速: 慢一点: SELECT id FROM huge_table ORDER BY id OFFSET 1000000 LIMIT 1000

我正在将70M行从源表移动到目标表,并在另一端使用完整的转储和恢复它,这是不可取的。我决定创建一个小的SQL文件,一次选择1M行,并将这些行插入到新表中(经过一些清理)。问题是,我需要用1M块遍历70M行,我才意识到每次迭代都越来越慢

有没有办法创建一个部分索引来加速具有偏移量0限制1000000、偏移量1000000限制1000000等的查询

例如:

快速:

慢一点:

SELECT id FROM huge_table ORDER BY id OFFSET 1000000 LIMIT 1000000
非常慢:

SELECT id FROM huge_table ORDER BY id OFFSET 5000000 LIMIT 1000000

你的区块“优化”只会产生另一个问题,实际上只是一种干扰。最初的问题是什么?最初的问题是使用dblink()将7000万行(每行都很大,是很长的文本)移动到不同服务器中的新表中。您是如何尝试的?我的意思是显示模糊代码。这是它的要点:我从旧数据库中选择1M ID创建一个临时表。之后,我使用tmp表中的ID移动表。删除tmp表,然后重复。这样我就可以解决问题,无需从头开始。我指的是没有区块“优化”的代码。特别是如何将数据插入可能存在问题的新表中。如果您致力于区块“优化”问题,我指的是解决方案,那么不必费心回答。
SELECT id FROM huge_table ORDER BY id OFFSET 5000000 LIMIT 1000000