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

标签 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;

请告诉我哪个性能更好?

最佳答案

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

执行两个单独的插入操作的唯一潜在问题是延迟,即某些进程进出数据库可能需要的时间。如果您担心这一点,那么您可以限制为一个插入语句:

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

这只需要访问一次数据库。

关于postgresql - Postgres - UNION ALL 与 INSERT INTO 哪个更好?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50980784/

相关文章:

database - Postgres 转储更改查询

postgresql - NOT NULL 约束什么时候运行,它可以等到事务要提交吗?

ruby-on-rails - PG::InvalidColumnReference: 错误:对于 SELECT DISTINCT,ORDER BY 表达式必须出现在选择列表中

python - Django 应用程序在容器内部运行,但无法解析容器外部的数据库

postgresql - 使用 thumbs_up gem 的 Rails 迁移错误

postgresql - 在 postgresql 中按 boxcolumn 排序查询

python - 如何将 Select * Postgres/Redshift 查询结果放入字典(列/值)

java - 如何使用实际数据库进行集成测试?

Python Unittest 无法在不提及错误源的情况下启动某些语法错误

c# - ASP vNext 和 PostgreSql