當須要對一些不須要的歷史數據進行大批量刪除時, 在使用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