二、慢查询发生的语句
代码块
DELETE FROM whole_rerun_task_slopsWHERE 1 = 1
三、explain执行计划:
【根因】
四、解决方案(采用方案二)
方案一:先分页查询出最大id,再删除小于最大id的数据
代码块
第一次
select id from whole_rerun_task_slops where id >= 1 order by id limit 10000,1//输出59999
delete from whole_rerun_task_slops where id < 59999
第二次
select id from whole_rerun_task_slops where id >= 59999 order by id limit 10000,1//输出6999
delete from whole_rerun_task_slops where id < 6999
思考:
加入where id >= 59999是因为,此逻辑是先查询后删除。
查询走的是从库,删除删的是主库。如果不加上where id >= 59999,会产生,主库虽然删除,但是从库数据还存在的情况。 所以第二次查询要在第一次结果的基础上再查询。
方案二:delete+orderby+limit 一句搞定
代码块
delete from whole_rerun_task_slops where 1=1 order by id asc limit 10000
执行计划如下

结果:发现删除时候走索引,删除1W条数据预计花费0.4s 符合预期。
