最近项目有个需求,把一张表中的数据根据一定条件增删改到另外一张表。按理说这是个很简单的SQL。可是在实际过程中却出现了超级长时间的执行过程。
后来经过排查发现是大数据量insert into xx select造成。
原因在于当insert into xx select数据量达到10万级别,同时又有Update和Delete操作表。容易造成锁表。
经过研究重构了SQL语句问题解决。具体解决方案如下:
1.update 和Delete操作当成一个事务处理
2.Insert into前先删除索引
3.将需要insert into的数据,拆分成不大于3000条/次去执行。