PostgreSQL - CREATE TABLE AS和INSERT INTO性能比较

问题描述:

我试图插入几百万行到PostgreSQL数据库中。我想知道做什么是最好的方法。PostgreSQL - CREATE TABLE AS和INSERT INTO性能比较

  1. CREATE TABLE AS
  2. INSERT INTO

我期待看到哪一个更好,为什么?我已经阅读了一些博客,但仍然无法得出结论。

我认为INSERT INTO是一个批量插入操作。如果我错了,请纠正我。是否CREATE TABLE AS SELECT是批量插入操作?

请指教。

+0

您尚未提供足够的信息来回答此问题。这里没有一个真相,它很大程度上取决于你实际在做什么。 – Nicarus

+0

[来自CREATE TABLE AS手册的引用](https://www.postgresql.org/docs/current/static/sql-createtableas.html):“*该命令在功能上类似于SELECT INTO,但它是首选因为它不太可能与SELECT INTO语法的其他用法混淆。此外,CREATE TABLE AS提供了SELECT INTO *“ –

CREATE TABLE AS也是批量插入操作。主要区别在于CREATE TABLE AS更容易针对PostgreSQL进行优化;很显然,不需要编写WAL信息(当然,除非基于WAL的复制处于活动状态)。对于适用此优化的其他一些情况,请参阅wal_level documentationDisable WAL Archival and Streaming Replication

+0

提供的功能的超集。感谢您的回应。当您说CREATE TABLE AS更容易针对PostgreSQL进行优化时,并且不需要写入WAL信息时,INSERT INTO必须将所有内容都记录到WAL中?我理解对吗? – Ramya

+0

正确。 'INSERT INTO'必须记录所有内容。我刚刚检查了PostgreSQL 9.4,并且在INSERT INTO中没有发生优化,即使表是在同一个事务中创建的。 –

+0

正是我需要知道的。谢谢Florian – Ramya