Postgresql
使用另一個表中的值更新表執行速度非常慢
我有一個包含大約 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 中,除非您打算進行自聯接
(強調我的)