更有效的更新数据库的方法

时间:2013-05-21 18:56:48

标签: performance postgresql sql-update auto-update

我有一张不时自动更新的表(比如说每天)。所有更新的字段都是TEXT类型,可能包含大量数据。我绝对知道的是,数据不会发生太大变化。通常最多添加或删除30个字符。 那会更有效率呢?以某种方式合并更改或删除旧数据并检索新数据? 并且,如果合并方式是这样做的,我该怎么做?是否有任何关键字或其他东西,以使这更容易和更有效?

P.S我对数据库一般都是新手,这是我第一次创建和使用数据库,很抱歉,如果这是一个愚蠢的问题

1 个答案:

答案 0 :(得分:3)

由于MVCC模型,PostgreSQL 始终为单个UPDATE中应用的任何更改集写入新行。没关系,你改变了多少。没有“合并方式”。

与删除行并插入新行类似(但不相同)。

由于您的列显然很大,它们将是TOASTed,这意味着它们被压缩并在一个单独的表中存储。在UPDATE中,如果这些列保持不变,则可以按原样保留,因此UPDATEDELETEINSERT便宜得多。引用the manual here

  

UPDATE操作期间,通常会保留未更改字段的值   保持原样;因此,行中UPDATE会产生一行值   如果没有任何外线值发生变化,则无TOAST费用。

如果您的行有批次列,而且只有一些更新了很多,那么有两个独立的表可能需要1:1的关系。但这是一个极端的例子。