我有两个联合查询,并插入到临时表中。
查询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;
请告诉我哪一个性能更好?
答案 0 :(得分:3)
我希望第二个选项至少在数据库级别具有更好的性能。两种版本都需要对a
和b
表进行全表扫描。但是第一个版本会创建一个不必要的中间表,仅用于插入目的。
执行两个单独的插入操作的唯一潜在问题是延迟,即进出数据库可能需要花费一些时间。如果您对此感到担心,则可以限制为一个插入语句:
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