哪个在psql中更快:2个来自选择的插入,或者来自选择联合的一个插入?

时间:2013-08-28 08:32:35

标签: sql performance postgresql insert

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

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。

2 个答案:

答案 0 :(得分:3)

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

2次插入〜 2600 ms
1插入带联合〜 10800 ms - 消除重复是昂贵的
1插入所有〜 2460 ms

sql fiddle demo

上查看

答案 1 :(得分:1)

在我的情况下(插入~7500行),差异大约是2秒(UNION ALL更快)。