Postgresql UPDATE约束列具有相同的值

时间:2014-04-03 13:22:34

标签: sql postgresql

UPDATEing约束(唯一,FK)列具有相同值时是否存在性能影响(如冗余索引查找)?

说,我已经更改了我的POJO的field1,但是对所有字段都进行了更新,例如

UPDATE pojo SET field1=?, field2=?, field3=?, ... WHERE ...

field2定义为UNIQUEfield3定义为FK)

1 个答案:

答案 0 :(得分:3)

是的,有。 PostgreSQL试图在某些地方优化它们,但支持有点限制。

首先,它可能导致weird effects with locking and foreign keys

另一方面,它会阻止行的HOT更新,强制索引更新,否则可能无需更新。

虽然对于唯一键字段通常不是问题,但如果将TOASTed字段更新为相同值,则还会强制重写外部TOAST数据,而不是完全不将其保留在更新之外。这会浪费空间和磁盘I / O.

总而言之,如果可以的话,请避免这样的更新。仅更新您实际更改过的字段。