INSERT INTO table SELECT 与 COPY 的 PostgreSQL 性能



我正在尝试在PostgreSQL中移动中等数量的数据(数千万到数亿行(。

在设计系统时,我试图理解:INSERT INTO table(field1, field2) SELECT field1, field2 FORM other_table的性能与PostgreSQL中的COPY FROM ... BINARY相比如何?

我找不到任何直接涉及该问题的文档。我可以看到一些注意事项:

  • INTO INTO ... SELECT需要从同一磁盘读取和写入
  • COPY FROM ... BINARY需要一个拥有数据的客户端,或者执行通过管道传输到COPY FROM ...的往返COPY TO ...

但我敢肯定还有其他人,我希望有某种形式的规范性能指导,围绕对这些的比较期望。

最终,这样的问题只能通过测试来回答。

但是,如果要将数据从一个表复制到另一个表,INSERT ... SELECT ...应该性能更好,因为它不需要将数据保存到中间文件或通过客户端-服务器连接。

速度提示:

  • 加载数据时,对新表没有约束和索引,但之后添加它们。

  • 确保max_wal_size很高。

之后我会VACUUM (FREEZE)新桌子(这不会干扰桌子上的正常工作(,以使未来的防环绕自动真空运行速度更快。

最新更新