2014-04-03 65 views
0

在更新具有相同值的約束(唯一FK)列時是否存在性能影響(如冗餘索引查找)?具有相同值的Postgresql UPDATE約束列

說,我已經改變了我的POJO field1,但更新完成所有領域,如

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

field2被定義爲UNIQUEfield3是FK)

回答

3

是的,有。 PostgreSQL試圖在某些地方優化它們,但支持有點有限。

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

另一方面,它會阻止HOT行的更新,強制索引更新,否則它們可能不是必需的。

雖然對於唯一鍵字段通常不是問題,但如果將TOASTed字段更新爲相同的值,而不是將其從更新中刪除,則還會強制重寫TOAST外部數據完全。這浪費了空間和磁盤I/O。

總而言之,如果可以,請避免此類更新。僅更新您實際更改的字段。