當我有如下表:如何通過更新來避免零散的數據庫存儲?
CREATE TABLE test
(
"id" integer NOT NULL,
"myval" text NOT NULL,
CONSTRAINT "test-id-pkey" PRIMARY KEY ("id")
)
當做了很多類似下面的查詢:
UPDATE "test" set "myval" = "myval" || 'foobar' where "id" = 12345
然後該行會設爲myVal隨着時間的推移越來越大。 postgresql會做什麼?它將從哪裏獲得空間?
我可以避免postgresql需要多個seek來讀取特定的myval-column嗎?
postgresql會自動執行此操作嗎?
我知道,通常我應該嘗試正常化數據更多。但我需要一次尋求閱讀價值。每次更新時Myval會放大約20個字節(即增加數據)。一些colums將有1-2次更新,大約1000次更新。 通常我只是使用一個新行而不是更新。但是,選擇正在變得緩慢。 所以我想到了反規範化的想法。
我不明白這個問題,但有了合適的索引,速度不應該成爲問題。此外,由於最終的行數較少,所以將值添加到現有列值的方式比添加新行要複雜得多,但這些行數會更大,因此速度更慢。此外,查詢沒有正確引用(僅供參考以節省一些錯誤)。 – DrColossos 2011-03-14 16:12:31
正是這個問題。數據庫用更新來存儲這些值有多複雜? postgresql會讀取舊數據並將其複製到新的位置?這是如何從postgresql管理的? – Chris 2011-03-14 16:30:28