Postgresql

使用另一個表中的值更新表執行速度非常慢

  • December 27, 2019

我有一個包含大約 3200 萬條記錄的 PostgreSQL 表 (tab_A),我還有一個包含大約 4000 條記錄的第二個 PostgreSQL 表 (tab_B)。tab_B 包含 3 個欄位,我打算將其值傳遞給 tab_A (field1, field2, field3)。

選項卡_A

  • 3200 萬條記錄
  • 唯一標識符 (id)
  • BTREE 索引

選項卡_B

  • 4000 條記錄
  • 唯一標識符 (id)
  • BTREE 索引

我正在嘗試使用以下查詢來完成這項工作(在此之前,我已經在 tab_A 中創建了 3 個新欄位來託管值):

UPDATE tab_A
SET field1 = t2.field1, field2 = t2.field2, field3 = t2.field3
FROM tab_A t1 JOIN tab_B t2
ON t1.uprn = t2.uprn;

這個查詢持續執行超過 5 個小時,我最終需要停止它,因為在我看來它不應該花費那麼長時間(我的理解是,如果兩個表都包含一個索引,這應該非常快)。

關於我是否在這裡遺漏了什麼的任何想法?考慮到 tab_A 包含 3200 萬條記錄,這可能是正常的?還有其他方法可以更有效地執行嗎?

不要在 FROM 子句中重複目標表:

UPDATE tab_A
  SET field1 = t2.field1, field2 = t2.field2, field3 = t2.field3
FROM tab_B t2
WHERE tab_A.uprn = t2.uprn;

從手冊中引用

請注意,目標表不得出現在 from_list 中,除非您打算進行自聯接

(強調我的)

引用自:https://dba.stackexchange.com/questions/256352