Postgresql 加快对多个表的更新
您可能知道,postgres上的更新内部联接不是最好的。我回到了旧的跨多个表更新方法,但在以下查询中遇到了一些性能问题:Postgresql 加快对多个表的更新,postgresql,Postgresql,您可能知道,postgres上的更新内部联接不是最好的。我回到了旧的跨多个表更新方法,但在以下查询中遇到了一些性能问题: UPDATE table_a a SET field1 = field4 FROM table_b b , table_c c WHERE a.field3 = b.field3 AND a.field1 = c.field4 AND ((a.field1 Is Null) Or (a.field1 ='')) AND (a.field2 ='T'); 有
UPDATE table_a a
SET field1 = field4
FROM table_b b , table_c c
WHERE a.field3 = b.field3
AND a.field1 = c.field4
AND ((a.field1 Is Null) Or (a.field1 ='')) AND (a.field2 ='T');
有没有人有更好/更快的方式在postgres中运行这样的查询
编辑:其中一个联接只是为了确保数据在该表中,尽管我不需要它。在这次更新中,表
c
的用途是什么?除了和a.field1=c.field4
(这可能会导致多个c
行匹配,导致对a.field1
进行多次更新)之外,它的值从未被使用过。顺便问一句:设置field1=field4
中的field4是否来自c
表?@joop验证它的存在,因此,要实现更新,它必须在a、b和c中,我不需要使用任何值,只要联接验证表中有数据,就可以尝试用存在的条件替换联接如果没有任何数字或解释计划,很难对性能进行任何说明。您的查询中有几个缺陷:1)您的WHERE
,当a.field1为Null
时,a.field1=c.field4
总是错误的(实际上Null
),所以这永远不会发生,所以从技术上讲,您的查询会检查a
中的每一行,c
中有一行是c.field4='
。2) 另外,由于a.field1=c.field4
位于WHERE
,因此SET field1=field4
将是一个NOOP(实际上只是触发更新触发器,但根本不更改数据)。