2014-01-22 71 views
0

我有一個大型的數據庫緩存,有幾百萬個條目。緩存每天重建兩次。不時,我想從數據庫中刪除一些緩存項。或者至少我想阻止他們出現在一些結果。在大型數據庫緩存中刪除或標記爲已刪除?

你會去更新一個條目,例如boolean deleted = true,以便結果省略此條目嗎?或者你會刪除該行嗎?在性能方面哪個更好,當然也是因爲緩存無論如何都是在一天中重新生成的。

回答

2

DELETE和UPDATE在PostgreSQL中具有類似的開銷和類似的速度(取決於是否更新索引列或非索引列),但是在VACUUM之後可以重用已刪除記錄使用的空間,因此數據庫不應該太快。所以通常DELETE是首選 - 但它取決於更多的因素。

+0

Eh? 'UPDATE'更接近'DELETE + INSERT',它增加了索引更新成本(除非它是HOT更新),並且強制全新的元組寫入。 'DELETE'只設置xmax。所以成本差別很大。 –

+0

我寫了「取決於如果你更新索引或非索引列」 –

+0

@CraigRinger所以你會建議更喜歡'DELETE'? – membersound