用户签到数据修正复盘--隐式类型转换导致索引失效案例

业务背景:

由于用户签到接口上线后, 存在新老接口并存! 老用户的签到数据存在在 user_sign_record表,新接口签到数据保存在 sign_user_sign表+user_sign_record表。故需要基于user_sign_record表修正sign_user_sign表中连续签到天数字段值~

处理过程

表结构如下:

 

表中已存在的索引:

 

待执行的SQL语句如下

SELECT 	id,	account_id,	sign_time,	is_delete FROM	user_sign_record 
WHERE
	account_id = 2076810915902193782
	AND sign_time >= '2023-01-13 00:00:00' 
	AND sign_time <= '2023-04-23 23:59:59' 
	AND is_delete = 0 
ORDER BY
	sign_time DESC

由于线上数据量是1471w,时间过滤效果不明显,account_id存在隐式样类型转换,无法使用

修复线上6k+用户,根据线上执行日志耗时预估,6000 *18 秒/3600 秒 =(18*10/6)小时=30小时 

效率太低!修正代码逻辑 ,传参字段改为 String类型的account_id,并创建 account_id和sign_time的联合索引! 

新的索引结构如下:

 

新查询语句

explain SELECT 	id,	account_id,	sign_time,	is_delete FROM	user_sign_record 
WHERE
	account_id = '2076810915902193782' 
	AND sign_time >= '2023-01-13 00:00:00' 
	AND sign_time <= '2023-04-23 23:59:59' 
	AND is_delete = 0 
ORDER BY
	sign_time DESC

最终,整个修复过程不到2分钟执行完毕! 效率提升显著

 message:任务号[AAB976E313064889BCBCE300F5F5BC3F],本轮签到数据修复总耗时 82947ms,总人数6338

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值