最近做项目,一张单表临时数据达到3亿,非常影响数据库性能,就考虑删除表中多余的数据,就遇到这个删除数据非常缓慢的问题了!
直接上代码吧:
DELETE FROM t_orders_detail WHERE pro_record_id in(SELECT a.prId FROM (SELECT pr.id AS prId FROM t_pro_record pr WHERE pr.state=3 LIMIT 0,1) a);
这种是用in的一般写法,删除起来奇慢!
后来经过该进,使用inner join 的方式删除起来,效率成倍的提升!
DELETE od FROM t_orders_detail od,(SELECT * FROM t_pro_record pr WHERE pr.state=3) a WHERE od.pro_record_id=a.prId;
总结:像mysql这个关系型数据库,最好的删除方式就是使用连接的方式删除,可以大大提高删除效率!