2

如标题所示:我有一张需要填充的表格。我有两个数据来源要放在该表中。哪个会更快:

INSERT INTO foo
SELECT bar, baz FROM xxxx;

INSERT INTO foo
SELECT beq, que FROM yyyyy;

或者:

INSERT INTO foo
SELECT * FROM (
SELECT bar, baz FROM xxxx
UNION
SELECT beq, que FROM yyyyy ) src;

我正在使用 PostgreSQL 9.1。

4

2 回答 2

3

我会说union all会比两次插入更快,只是因为它是一个事务而不是两个事务,但我根本不是 DBA,我想这可能取决于表中的行数/列类型。在 PostgreSQL 9.2.4 上的 SQL fiddle 上测试了 2 个表,每个表有 1 000 000 条记录。结果:

2 次插入 ~ 2600毫秒
1 次插入联合 ~ 10800毫秒 -消除重复是昂贵的
1 插入与联合所有〜2460毫秒

看到它sql fiddle demo

于 2013-08-28T10:38:52.700 回答
1

就我而言(插入约 7500 行),差异约为 2 秒(UNION ALL 更快)。

于 2013-08-29T09:08:26.297 回答