2013-05-21 38 views
1

我有一個表是不時自動更新(如每日)。所有更新的字段類型爲TEXT,並且可能有大量數據。我所知道的是數據不會有太大的變化。通常最多可以添加或刪除30個字符。 那麼更高效的是什麼?以某種方式合併更改或刪除舊數據並檢索新數據? 而且,如果合併的方式是這樣做的,我該怎麼做?有沒有任何關鍵字或什麼,爲了使這更容易和更高效?最有效的方式來更新數據庫

PS我完全新的一般的數據庫,這是我第一次過創建和使用一個數據庫,很抱歉,如果這是一個愚蠢的問題

+0

如果可能的話,將字段拆分爲邏輯部分,而不是將它們存儲爲大的「文本」blob,以便只更新實際需要更新的塊。嘗試規範化數據並對其進行結構化。 –

+0

@CraigRinger是的,我會在稍後調整它的大小,但是我需要在週五之前完成它的工作,所以現在我會像提交我的帖子那樣做。 –

回答

3

由於MVCC模型,PostgreSQL的總是的新行單個UPDATE中應用的一組更改。沒關係,你改變多少。沒有「合併方式」。

它與刪除行並插入新行相似(但不相同)。

由於你的列顯然很大,它們將會是TOASTed,這意味着它們被壓縮並且在一個單獨的表中被非線性地存儲。在UPDATE中,如果這些列保持不變,這些列可以保持原樣,因此UPDATEDELETEINSERT要便宜得多。引用the manual here

在一個UPDATE操作中,通常是 保留不變字段的值原樣;因此如果沒有任何外聯值更改,則具有非線性值的行中的UPDATE成本爲 否TOAST成本。

如果行有很多列,僅部分得到更新了很多,它可能會支付有一個1兩個獨立的表:1的關係。但這是一個極端的例子。

相關問題