这篇笔记主要记录:大表深分页问题解决:
问题描述
A表中,数据量大约在250W左右,并且还在持续增长
表中的核心字段:
id:
店铺id:
用户id:
模板id:
我现在的场景是,在某一个店铺关闭的时候,需要把这个表中对应店铺下所有的用户数据都删除,因为考虑到数据量较大,所以采用异步方式来处理
异步线程在处理的时候,也是分批处理的,不可能一次全部删除完毕,所以,提供了两个接口:
1.切割接口:一次切割1000条数据,然后返回
2.执行接口:根据切割接口返回的数据,执行删除操作
对于这两个接口,可以认为:在异步消息消费到之后,会先调用split接口,切分一部分数据,然后获取到切分之后的结果之后,再调用执行接口
这两个接口有可能是并行执行的,所以需要考虑防止对数据出现重复处理的问题
切割接口里面,原来使用的sql是:select id,店铺id,用户id,模板id from A where 店铺id = ‘’ limit 0,1000;
这样有一个问题:如果这个店铺的数据量过大的时候,会出现:select id,店铺id,用户id,模板id from A where 店铺id = ‘’ limit 150000,1000;
这样的话,sql会慢,慢就导致dubbo接口会超时
看了下执行计划,也走了索引,并且也使用了索引覆盖