慢sql优化

本文详细记录了一个250万条数据的大表在深分页场景下遇到的问题及优化过程。原始SQL在处理大量数据时导致接口超时。通过调整SQL,将`LIMIT`改为结合主键ID的范围查询,显著降低了执行时间,提高了效率。优化后的SQL执行耗时从原来的300ms降低到12ms,提升了20倍。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

这篇笔记主要记录:大表深分页问题解决:

问题描述

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接口会超时
看了下执行计划,也走了索引,并且也使用了索引覆盖࿰

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值