Postgres-UNION ALL与INSERT INTO哪个更好?

时间:2018-06-22 04:42:16

标签: postgresql

我有两个联合查询,并插入到临时表中。

查询1

select * 
from (
    select a.id as id, a.name as name from a
    union all
    select b.id as id, b.name as name from b
)

查询2

drop table if exists temporary;

create temp table temporary as
select id as id, name as name 
from a;

insert into temporary
select id as id, name as name 
from b;

select * from temp;

请告诉我哪一个性能更好?

2 个答案:

答案 0 :(得分:3)

我希望第二个选项至少在数据库级别具有更好的性能。两种版本都需要对ab表进行全表扫描。但是第一个版本会创建一个不必要的中间表,仅用于插入目的。

执行两个单独的插入操作的唯一潜在问题是延迟,即进出数据库可能需要花费一些时间。如果您对此感到担心,则可以限制为一个插入语句:

INSERT INTO temporary (id, name)
SELECT id, name FROM a
UNION ALL
SELECT id, name FROM b;

这只需要一趟数据库。

答案 1 :(得分:0)

我认为全部使用联盟是更好的性能方式,不确定,您可以自己尝试。在SQL应用程序的选项卡运行中,始终显示运行时间。我在oracle中快照; mysql和sql sv具有相同的工具来查看它 click here to see image