我知道当我在Pg中有一行时,该行被重写,并且当新行被激活时旧行被取消激活。我知道这是由于MVCC层是如何实现的。高级Postgres的INSERT/UPDATE速度下降了吗?
那么UPDATE
优于DELETE ... INSERT
的优势呢?在Postgresql中还有什么关于UPDATE
和DELETE
的关系吗?我找不到任何有关这个或者邮件列表发布的文档。显然,他们运行不同的用户触发器(如果有的话),但是发生什么情况会给他们提供不同的性能配置文件?
我知道当我在Pg中有一行时,该行被重写,并且当新行被激活时旧行被取消激活。我知道这是由于MVCC层是如何实现的。高级Postgres的INSERT/UPDATE速度下降了吗?
那么UPDATE
优于DELETE ... INSERT
的优势呢?在Postgresql中还有什么关于UPDATE
和DELETE
的关系吗?我找不到任何有关这个或者邮件列表发布的文档。显然,他们运行不同的用户触发器(如果有的话),但是发生什么情况会给他们提供不同的性能配置文件?
DELETE将触发外键约束,您可能会违反它们。其他触发器也可能是一个问题。
如果更改FILLFACTOR,还可以给数据库选项以执行HOT update。这是与原始记录所在位置相同的内存块内的更新。作为正常更新,HOT更新可以更快并且产生更少的开销(真空)。
附加信息:HOT更新只能在更新的所有字段不是任何索引的一部分时才会发生。 – 2010-08-11 18:32:17
这不是一个答案,但请考虑,如果使用参照完整性(外键),则DELETE + INSERT可能会导致问题。 – 2010-08-11 15:28:57