我有一个要更新的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个小时。
答案 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