简单的更新查询花费的时间太长 - Postgres

Simple update query taking too long - Postgres

我有一个 table 有 2800 万行我想更新。它有大约 60 列和一个 ID 列(主键),并在其上创建了索引。我创建了四个新列,我想用来自其他 table 的四个列的数据填充它们,这些列也有一个 ID 列,上面创建了一个索引。两个 table 都具有相同数量的行,并且只有 IDENTI 列上的主键和索引。查询已经 运行 15 个小时了,因为它是高优先级的工作,我们开始对此感到紧张,我们没有太多时间来试验查询。我们从来没有更新过这么大的 table (7 GB),所以我们不确定这个时间是否正常。

这是查询:

UPDATE consolidated
SET IDEDUP2=uni.IDEDUP2
USE21=uni.USE21
USE22=uni.USE22
PESOXX2=uni.PESOXX2
FROM uni_group uni, consolidated con
WHERE con.IDENTI=uni.IDENTI

我怎样才能让它更快?可能吗?如果没有,有没有办法检查它需要多长时间(不终止进程)?

作为附加信息,我们有 运行 在更复杂的查询之前有 300 万行 tables (postgis),它也花了大约 15 个小时。

您应该在 FROM 子句中重复目标 table。您的语句创建了 consolidated table 与自身的笛卡尔连接,这不是您想要的。

您应该使用以下内容:

UPDATE consolidated con
   SET IDEDUP2=uni.IDEDUP2
       USE21=uni.USE21
       USE22=uni.USE22
       PESOXX2=uni.PESOXX2
FROM uni_group uni
WHERE con.IDENTI = uni.IDENTI