更新许多特定行上的相同数据

时间:2013-02-28 10:44:57

标签: sql database postgresql postgresql-9.1

我想更新多行。我有很多id指定要更新的行(大约12k ID)。

实现这一目标的最佳方式是什么?

我知道我能做到

UPDATE table SET col="value" WHERE id = 1 OR id = 24 OR id = 27 OR id = ....repeatx10000

但我认为这会带来糟糕的表现,对吧?那么是否有更好的方法来指定要更新的ID?

Postgresql版本是9.1

4 个答案:

答案 0 :(得分:2)

在严格的更新性能方面,不会有太大变化。必须找到并更新具有给定ID的所有行。

可以简化通话的一件事是使用in关键字。它是这样的:

UPDATE table SET col="value" WHERE id in ( 1,24,27, ... );

我还建议确保ID的ID与id建议的顺序相同,可能是提升。

答案 1 :(得分:2)

将您的ID放在表格中。然后做这样的事情:

UPDATE table SET col="value" WHERE id in (select id from table_of_ids_to_update)

或者,如果您的ID的来源是其他查询,请使用该查询来获取您要更新的ID。

UPDATE table SET col="value" WHERE id in (
       select distinct id from some_other_table
           where some_condition_for_updating is true
           ... etc. ...
    )

对于更复杂的基于另一个表的更新案例,this question给出了一个很好的例子。

答案 2 :(得分:0)

UPDATE表SET col =“value”WHERE id in(从表中选择id);

同时对您的id字段进行索引,这样您将获得更好的性能。

答案 3 :(得分:0)

值得注意的是,如果你引用一个表,如@ dan1111所示,请不要使用get.php,当然要避免使用in (select ..)!相反,请使用distinct -

exists

这可确保仅根据需要扫描参考表。