UPDATEing约束(唯一,FK)列具有相同值时是否存在性能影响(如冗余索引查找)?
说,我已经更改了我的POJO的field1
,但是对所有字段都进行了更新,例如
UPDATE pojo SET field1=?, field2=?, field3=?, ... WHERE ...
(field2
定义为UNIQUE
,field3
定义为FK)
答案 0 :(得分:3)
是的,有。 PostgreSQL试图在某些地方优化它们,但支持有点限制。
首先,它可能导致weird effects with locking and foreign keys。
另一方面,它会阻止行的HOT
更新,强制索引更新,否则可能无需更新。
虽然对于唯一键字段通常不是问题,但如果将TOASTed字段更新为相同值,则还会强制重写外部TOAST数据,而不是完全不将其保留在更新之外。这会浪费空间和磁盘I / O.
总而言之,如果可以的话,请避免这样的更新。仅更新您实际更改过的字段。