Postgresql
標記 MVCC 的 UPDATE 優化
我們有一個包含 200k 行的表,我們每天在其中多次更改一些標誌。如果我理解正確,postgres 上的 UPDATE 是磁碟上的 DELETE+INSERT。
我想知道這對於我們的案例是否效率很低。如果每個元組的大小都很大怎麼辦?整個元組又寫了嗎?
我正在考慮將這些狀態標誌移動到一個單獨的表上,以便我們只重寫小元組來減少無用的 i/o。這是正確的方法還是我走錯了路?
你基本上是對的。
如果您使用一定數量的可用空間定義單獨的表(請參閱
fillfactor
參考資料),這也會有所幫助,以便 PostgreSQL 可以執行僅堆元組更新。請參閱Anvesh Patel的使用 HOT UPDATE(僅堆元組)提高 UPDATE 查詢的速度。