Postgres批量刪除數據

當須要對一些不須要的歷史數據進行大批量刪除時, 在使用delete語句時,會發如今刪除一些數據時會很是慢數據庫

好比 DELETE FROM test where id < 10000;工具

刪除緩慢的緣由主要在於外鍵約束,當數據庫在有約束的狀況下,不管進行刪除或者更新操做, 都會對相關表進行一個校驗,判斷相關表的相關記錄是否被刪除或者更新。 這個檢查的過程會很是慢, 尤爲在外建表又關聯着外建表的這種層層嵌套的狀況下。優化

解決方法: 索引

ALTER TABLE test DISABLE TRIGGER ALL;test

這樣就會發現,刪除的速度會大幅度上升, 以前對於操做過的嵌套表刪除時,從幾十分鐘到1分鐘之內,瞬間提速不少。效率

在刪除完數據後, 必定要記得把trigger改回來, 調用:方法

ALTER TABLE test ENABLE TRIGGER ALL;數據

在刪除完數據後,再從新對物理表進行一個優化查詢

1.  使用vacuum(維護數據庫磁盤的工具)刪除那些已經被標記爲刪除的數據,並釋放空間。可是vacuum工具不能對相應的索引進行清理,因此須要第二步重建索引磁盤

vacuum FULL test

2. 從新創建索引提升查詢效率 

REINDEX TABLE test

相關文章
相關標籤/搜索