删除百万条数据级的若干处理方式

1.像mysql这个关系型数据库在数据量达到千万级别之后,删除数据尤其之慢,更甚者生成环境是基本不允许这样低效率的操作出现,为此需要另种优化删除方式–来经过该进,使用inner join 的方式删除起来,效率成倍的提升!例如通过以下语句的调整更改提高删除效率:

DELETE a FROM t_orders_detail a,(SELECT * FROM t_pro_record c WHERE c.state=3) b WHERE a.pro_record_id=b.prId;

2.每次删除记录,数据库都要相应地更新索引,这是很慢的IO操作,而且后面索引下的碎片越来越多,就更慢,这就是为什么一开始只花1.5小时,后面要3小时才能删除400万条记录,呈递增式的缓慢操作效果

A.删除之前,做个完整备份,一般而言是没有目标表的则select into from来塑造,有目标表则通过insert into select  * from;
B.删除前先保存当前索引的DDL,然后删除其索引;
C.然后根据使用的删除条件建立一个临时的索引,以此建立提高删除效率的索引,打造围绕一个字段的聚集型索引,以此为基地大大提升删除效率;
D.开始执行删除操作,过程会大大削减,时间得到节省,效率显而易见,完成之后再重建之前的索引。

3.若是低于千万级别的数据同时所删数据也较少几万条以内的话,可以把要保留的数据备份出来。在drop表。重新创建,先不要急着创建索引、主键,把数据导回去,然后在建索引、约束之类的。

猜你喜欢

转载自blog.csdn.net/annderlee/article/details/89466012