如标题所示:我有一张桌子需要填充。我有两个数据源放在该表中。哪个会更快:
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。
答案 0 :(得分:3)
我会说union all
比两个插入更快,只是因为它是一个事务而不是两个,但我根本不是DBA,我想它可能取决于行数/类型表中的列。在2个表上对PostgreSQL 9.2.4上的SQL小提琴进行测试,每个表有1 000 000条记录。结果:
2次插入〜 2600 ms
1插入带联合〜 10800 ms - 消除重复是昂贵的!
1插入所有〜 2460 ms
答案 1 :(得分:1)
在我的情况下(插入~7500行),差异大约是2秒(UNION ALL更快)。