首页 > 解决方案 > UNION 合并表的成本很高,失去与服务器的连接

问题描述

我正在尝试创建一个新表作为UNION具有相同列的两个现有表的所有行:

CREATE TABLE table3 AS
(SELECT * from table1
UNION
SELECT * from table2);

运行一段时间后,我得到“与服务器的连接已丢失”。运行EXPLAIN,操作成本相当高:

Unique  (cost=51951688.65..57110689.45 rows=257950040 width=36)
  ->  Sort  (cost=51951688.65..52596563.75 rows=257950040 width=36)
        Sort Key: table1.id, table1.stid, table1.e5, table1.e10, table1.diesel, table1.date, table1.changed
        ->  Append  (cost=0.00..8859500.00 rows=257950040 width=36)
              ->  Seq Scan on gas_prices  (cost=0.00..1282341.56 rows=66285256 width=36)
              ->  Seq Scan on gas_prices_1620  (cost=0.00..3707907.84 rows=191664784 width=36)
JIT:
  Functions: 1
  Options: Inlining true, Optimization true, Expressions true, Deforming true

所以这是占用大量资源的排序。我在 postgresql.conf 中设置的内存设置高于默认值,但我只在具有 16gb 内存的系统上运行。我怀疑重新索引现有表可能会有所帮助,但是我不确定要创建哪个索引。两个表上都没有私钥:没有单个列或列组合是唯一的(同时所有列除外)。

我怎样才能让查询工作?谢谢你的帮助。

标签: postgresqlindexingmergeunion

解决方案


使用 UNION ALL 而不是 UNION。

最好的问候,
Bjarni


推荐阅读