【发布时间】:2018-06-05 20:16:36
【问题描述】:
我有一个在 16 核/32 Gb WIndows Server 工作站上运行的 Postgres 实例。
我遵循了在以下位置看到的性能改进提示:https://www.postgresql.org/docs/9.3/static/performance-tips.html。
当我运行如下更新时:
analyze;
update amazon_v2
set states_id = amazon.states_id,
geom = amazon.geom
from amazon
where amazon_v2.fid = amazon.fid
其中fid是两个表的主键,都有68M的记录,运行差不多一天。
有没有办法提高这样的SQL语句的性能?例如,我是否应该编写一个存储过程来逐条处理它?
【问题讨论】:
-
更新前你真的运行
analyze吗? -
您确定所有行都需要更新吗?您可以添加
and (amazon_v2.states_id <> amazon.states_id or amazon_v2.geom <> amazon.geom)以减少需要更改的行数 -
您在
states_id字段上有索引吗?如果 amazon_v2 中的许多行正在更新为states_id的不同值,您可能希望删除 states_id 上的索引(如果存在),然后在更新后重建它 -
问题是我将亚马逊表的一些列导出到csv提交到h2o。现在我需要在新版本的亚马逊表 v2 中将结果返回到数据库。 geom 和 states_id 列在 h2o 中不是必需的,但我需要 amazon_v2 中的那些。这次更新花费了很多时间,我想我将导出 geom 和 states_id,处理数据并使用 /copy 将所有列导入回来。我想它会更快。我认为如果我可以“强制”postgres 使用更多资源,那就太好了。
-
请edit您的问题并为有问题的表(包括所有索引)添加
create table语句,您正在使用的查询和生成的execution plan使用explain (verbose)。 Formatted text 请no screen shots
标签: sql postgresql query-performance