postgresql - 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 内存的系统上运行。我怀疑重新索引现有表可能会有所帮助,但是我不确定要创建哪个索引。两个表上都没有私钥:没有单个列或列组合是唯一的(同时所有列除外)。
我怎样才能让查询工作?谢谢你的帮助。
解决方案
使用 UNION ALL 而不是 UNION。
最好的问候,
Bjarni
推荐阅读
- java - 如何重置 JTable 列箭头
- javascript - 为什么所有网络播放器都不支持 akamaid m3u8 链接
- html - 无法显示与伪类混合的背景图像
- arch - 由于 makepkg 错误,Pacaur 安装失败
- javascript - scrollTo(target, options) 在移动设备中不起作用。(机车卷轴)
- reactjs - Flatlist 无法正确呈现我的产品
- python - Webdriver 在页面上找不到元素
- java - Netbeans IDE 在创建新的 ActionTimer、ChangeListener 后“停止工作”
- filtering - Freemarker Netsuite Advance PDF 中的 Netsted 分组
- android - Android webview - 在flutter应用程序中显示网站弹出窗口时的放置问题