0
在更新具有相同值的約束(唯一FK)列時是否存在性能影響(如冗餘索引查找)?具有相同值的Postgresql UPDATE約束列
說,我已經改變了我的POJO field1
,但更新完成所有領域,如
UPDATE pojo SET field1=?, field2=?, field3=?, ... WHERE ...
(field2
被定義爲UNIQUE
和field3
是FK)
在更新具有相同值的約束(唯一FK)列時是否存在性能影響(如冗餘索引查找)?具有相同值的Postgresql UPDATE約束列
說,我已經改變了我的POJO field1
,但更新完成所有領域,如
UPDATE pojo SET field1=?, field2=?, field3=?, ... WHERE ...
(field2
被定義爲UNIQUE
和field3
是FK)
是的,有。 PostgreSQL試圖在某些地方優化它們,但支持有點有限。
首先,它可能會導致weird effects with locking and foreign keys。
另一方面,它會阻止HOT
行的更新,強制索引更新,否則它們可能不是必需的。
雖然對於唯一鍵字段通常不是問題,但如果將TOASTed字段更新爲相同的值,而不是將其從更新中刪除,則還會強制重寫TOAST外部數據完全。這浪費了空間和磁盤I/O。
總而言之,如果可以,請避免此類更新。僅更新您實際更改的字段。