首页 > 解决方案 > Postgres SQL 语句性能

问题描述

我有一个在 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 语句的性能吗?例如,我应该编写一个存储过程来逐条处理它吗?

标签: sqlpostgresqlquery-performance

解决方案


您没有显示执行计划,但我敢打赌它可能正在执行Full Table Scanamazon_v2并使用Index Seek on 。amazon

我在这里看不到如何提高性能,因为它已经接近最佳状态。我能想到的唯一想法是使用表分区和并行执行。

另一个完全不同的策略是只更新“修改”的行。也许您可以跟踪这些以避免每次都更新所有 6800 万行。


推荐阅读