我有一个不时自动更新的表(比如每天)。所有更新的字段都是 TEXT
类型,并且可能包含大量数据。我确定知道的是数据不会有太大变化。通常最多添加或删除 30 个字符。
那么什么会更有效率呢?以某种方式合并更改或删除旧数据并检索新数据?
而且,如果合并方式是这样做的方式,我应该怎么做?是否有任何关键字或其他东西可以使这更容易和更有效?
P.S 总的来说,我对数据库完全陌生,这是我第一次创建和使用数据库,如果这是一个愚蠢的问题,我深表歉意
最佳答案
由于 MVCC模型,PostgreSQL 总是 为在单个UPDATE
中应用的任何 组更改写入一个新行。没关系,你改变多少。没有“合并方式”。
这类似于(但不相同)删除行并插入新行。
由于您的列显然很大,因此它们将是 TOASTed ,这意味着它们被压缩并离线存储在一个单独的表中。在 UPDATE
中,如果这些列保持不变,则可以按原样保留,因此 UPDATE
比 DELETE
和 插入
。引用 the manual here
During an
UPDATE
operation, values of unchanged fields are normally preserved as-is; so anUPDATE
of a row with out-of-line values incurs noTOAST
costs if none of the out-of-line values change.
如果您的行有很多列,并且只有一些列经常更新,那么使用两个具有 1:1 关系的单独表可能会有所帮助。但这是一个极端的例子。
关于performance - 更新数据库的最有效方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16677470/