如标题所示:我有一个需要填充的表。我有两个数据来源放在那张表里。会更快:
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。
最佳答案
我想union all
会比两个insert快,因为它是一个事务而不是两个事务,但我根本不是DBA,我想这可能取决于表中的行数/列类型。在PostgreSQL 9.2.4上的SQL fiddle上测试,每个表有1000 000条记录。结果:
2个插件~2600 ms
1个带union~10800 ms的插入-消除重复项非常昂贵!
1个带活接头的插入件,全部约2460 ms
在上查看