记录一次利用条件索引优化接口性能的实践

一、业务背景

某表数据量达到4000w,需要每天定时任务处理20w条。前2周内SQL执行无任何问题,非常快,效率比较高。随着处理完的数据量变大,处理完数据状态设置为1,SQL执行效率越来越差,已经达到了惊人的4.6秒。
SQL如下:其中表A的expired_date是有索引的。

select id,expired_date,process_status 
from A 
where 
expired_date< '2025-02-11' and expired_date >= '2025-02-01'
and process_status = 0
limit 1000

二、分析及优化

1:分析SQL执行计划

发现虽然走了expired_date 索引,但是随着定时任务处理的数据原来越多,查询的跨度比较大,过滤无效数据达到了900w,耗时4100ms,导致SQL的整体性能下降。

2:增加条件索引

create index a_process_status on a(process_status) where process_status = 0;

3:优化效果

同样的执行SQL,过滤无效数据降低到了1000以下,耗时1.8ms,极大了提升了执行效率。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值