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

时间:2018-11-29 07:54:10

标签: postgresql indexing database-performance

我有一个要更新的2800万行的表。它具有约60列和一个ID列(主键),并在其上创建了索引。我创建了四个新列,并希望使用来自其他表的四个列的数据来填充它们,该表还具有一个ID列,并在该列上创建了索引。两个表的行数相同,而IDENTI列上只有主键和索引。该查询已经运行了15个小时,并且由于它是高优先级的工作,因此我们开始对此感到紧张,而且我们没有太多时间来进行查询实验。我们从未更新过如此大的表(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万行表(postgis)进行了更为复杂的查询,并且还花了大约15个小时。

1 个答案:

答案 0 :(得分:4)

您不应在FROM子句中重复目标表。您的语句使用自己创建了consolidated表的笛卡尔联接,这不是您想要的。

您应使用以下内容:

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