Postgresql Postgres-UNION ALL vs INSERT哪个更好?
我有两个UNIONALL查询和insert到临时表中 问题1Postgresql Postgres-UNION ALL vs INSERT哪个更好?,postgresql,Postgresql,我有两个UNIONALL查询和insert到临时表中 问题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 na
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;
请告诉我哪一个性能更好?我希望第二个选项具有更好的性能,至少在数据库级别。两个版本都需要对
a
和b
表进行完整的表扫描。但第一个版本将创建一个不必要的中间表,仅用于insert
执行两个单独插入的唯一潜在问题是延迟,即可能需要一些进程才能到达和离开数据库。如果您对此感到担忧,则可以限制为一条insert语句:
INSERT INTO temporary (id, name)
SELECT id, name FROM a
UNION ALL
SELECT id, name FROM b;
这只需要访问数据库一次。我希望第二个选项具有更好的性能,至少在数据库级别。两个版本都需要对
a
和b
表进行完整的表扫描。但第一个版本将创建一个不必要的中间表,仅用于insert
执行两个单独插入的唯一潜在问题是延迟,即可能需要一些进程才能到达和离开数据库。如果您对此感到担忧,则可以限制为一条insert语句:
INSERT INTO temporary (id, name)
SELECT id, name FROM a
UNION ALL
SELECT id, name FROM b;
这只需要访问数据库一次。我认为使用union all是性能更好的方法,不确定,您可以自己尝试。在SQL应用程序的“运行”选项卡中,始终显示运行时间。我在oracle中拍摄快照;mysql和SQLSV有相同的工具来查看它
我认为使用union all是性能更好的方法,不确定,您可以自己尝试。在SQL应用程序的“运行”选项卡中,始终显示运行时间。我在oracle中拍摄快照;mysql和SQLSV有相同的工具来查看它
我很困惑,为什么第一个查询会创建不必要的中间表?你是说查询2吗?我也很困惑,因为你的第一个例子实际上没有插入。但看起来您将执行
插入到临时SELECT*FROM(…)
,这是浪费,因为您正在强制执行一个中间表。嗯。。。我不是OP,但我猜他只是想问“通过并集选择两个表”和“通过插入另一个表选择两个表”,哪一个更快。我想我理解你的意思,如果你说“但是‘第二个’版本会创建一个不必要的中间表”,如果最终目标是“仅仅”返回联盟的结果,第一个肯定是更好的选择。@a_horse_,没有名字,我也许不应该回答,因为仍然不清楚OP是在尝试插入还是只是选择。我很困惑,为什么第一个查询会创建不必要的中间表?你是说查询2吗?我也很困惑,因为你的第一个例子实际上没有插入。但看起来您将执行插入到临时SELECT*FROM(…)
,这是浪费,因为您正在强制执行一个中间表。嗯。。。我不是OP,但我猜他只是想问“通过并集选择两个表”和“通过插入另一个表选择两个表”,哪一个更快。我想我理解你的意思,如果你说“但是‘第二个’版本会创建一个不必要的中间表”,如果最终目标是“仅仅”返回联盟的结果,第一个肯定是更好的选择。@a_horse_,没有名字,我也许不应该回答,因为仍然不清楚OP是尝试执行插入还是仅执行选择。您使用的是SQL Server还是Postgres?我删除了SQL Server
标记作为创建表作为..
对SQL Server无效您使用的是SQL Server还是Postgres?我删除了SQL Server
标记作为创建表作为..
不是对SQL Server有效