Postgresql 合并表的联合成本高,与服务器的连接丢失
我正在尝试创建一个新表,作为两个具有相同列的现有表的所有行的Postgresql 合并表的联合成本高,与服务器的连接丢失,postgresql,indexing,merge,union,Postgresql,Indexing,Merge,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..
并集
:
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的系统上运行。
我怀疑对现有表重新编制索引可能会有所帮助,但是我不确定要创建哪个索引。两个表上都没有私钥:没有一个或多个列的组合是唯一的(一次所有列除外)
我怎样才能使查询正常工作?谢谢您的帮助。使用UNION ALL而不是UNION 致以最诚挚的问候,
比亚尼谢谢你的回答,它很有效!当我继续检查/删除新创建的表中的重复记录时,我不可能遇到同样的资源问题吗?好吧,你说的行都是不同的,它必须是一组有限的列,可以算作重复,这对你有利。你需要大量的记录才能有
group by。。。例如,具有…
扼流圈。