当须要对一些不须要的历史数据进行大批量删除时, 在使用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