论坛
潜水/灌水快乐,沉淀知识,认识更多同行。
ToB圈子
加入IT圈,遇到更多同好之人。
朋友圈
看朋友圈动态,了解ToB世界。
ToB门户
了解全球最新的ToB事件
博客
Blog
排行榜
Ranklist
文库
业界最专业的IT文库,上传资料也可以赚钱
下载
分享
Share
导读
Guide
相册
Album
记录
Doing
搜索
本版
文章
帖子
ToB圈子
用户
免费入驻
产品入驻
解决方案入驻
公司入驻
案例入驻
登录
·
注册
只需一步,快速开始
账号登录
立即注册
找回密码
用户名
Email
自动登录
找回密码
密码
登录
立即注册
首页
找靠谱产品
找解决方案
找靠谱公司
找案例
找对的人
专家智库
悬赏任务
圈子
SAAS
ToB企服应用市场:ToB评测及商务社交产业平台
»
论坛
›
软件与程序人生
›
后端开发
›
Java
›
线上sql执行慢,分享3个优化案例
线上sql执行慢,分享3个优化案例
万万哇
金牌会员
|
2023-3-19 22:16:08
|
显示全部楼层
|
阅读模式
楼主
主题
833
|
帖子
833
|
积分
2499
前段时间,博主线上项目的几个后端接口执行耗时达到了三、四秒钟以上,查看接口代码,发现 sql 语句执行过慢,于是开始分析 sql 执行 这里把比较经典的优化案例分享给大家。
本文所讲述 MySql 8.0+
代码演示地址:
https://github.com/wayn111/newbee-mall-pro
博主github地址:
https://github.com/wayn111
欢迎大家关注,点个star
一、or 查询条件错误
线上有一个第三方账户扫码绑定手机号登录的接口,这个接口正常逻辑如下:
使用 苹果、QQ、微信获取扫描客户端登录二维码,获取用户第三方账户唯一ID后。
判断第三方账户ID是否存在用户表中,存在且已绑定手机号则直接返回用户 token 进行登录操作。
不存在则提示用户进行绑定手机号操作。
用户填写手机号及短信验证码后,进行第三方账户唯一ID与手机号的绑定,成功则返回用户 token 进行登录操作。
博主记得这个接口是在21年10月上线的,到现在经历了一年多,接口执行时间是越来越慢,初步分析是用户数量持续增长,用户表记录越来越多,导致 sql 查询执行效率越来越低导致。这里用 vc_member_bak 进行举例,表结构以及数据展示,其中
apple_id、weixn_id、qq_id
有建立索引:
vc_member_bak 表数据量在46万左右,开启日志分析后,发现是下面这条 sql 执行太慢导致:
SELECT * FROM vc_member
WHERE qq_id = 'xxx' OR app_id = 'xxx' OR weixin_id = 'xxx' ;
复制代码
执行结果:
需要1.3秒左右,这是在我本地模拟的数据,线上用户在百万级别,耗时已经达到2、3秒,于是博主开始上 explain,分析 sql 执行:
由于 explain 结果中 key 列为空,明显可知虽然 possible_keys 列有值,但是执行过程中,没有使用索引导致全表查询,从rows 列为46万可以看出已经基本接近于全表查询。
那么问题出在哪里?我们不是已经给
apple_id、weixn_id、qq_id
三个字段都添加索引了吗。
于是博主仔细查询 sql 语句发现里面有坑,查询的 where 条件上使用的三个条件字段是分别是
app_id、weixin_id、qq_id
,而我们的索引字段是
apple_id、weixn_id、qq_id
,很明显这是查询字段 apple_id 写成 app_id 了导致。app_id 没有加索引,所以在 or 条件查询下执行的就是全表扫描。
更改字段后执行结果:
Ok,这里发现了是查询字段写错了,那么修改查询字段正确后,查询0.18秒就正常了。
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
本帖子中包含更多资源
您需要
登录
才可以下载或查看,没有账号?
立即注册
x
回复
使用道具
举报
0 个回复
倒序浏览
返回列表
快速回复
高级模式
B
Color
Image
Link
Quote
Code
Smilies
您需要登录后才可以回帖
登录
or
立即注册
本版积分规则
发表回复
回帖并转播
回帖后跳转到最后一页
发新帖
回复
万万哇
金牌会员
这个人很懒什么都没写!
楼主热帖
markdown day 01
基于CSDN云和docker全家桶的微服务项目 ...
Nacos注册中心-----从0开始搭建和使用 ...
Linux系统调用四、lseek()函数详解 ...
ClickHouse(05)ClickHouse数据类型详解 ...
【云原生】Docker 进阶 -- 数据卷使用 ...
谈谈技术能力
100天精通Python(进阶篇)——第39天 ...
阿里云域名购买流程以及免费证书的申请 ...
redis for windows 7.0.2安装包全网首 ...
标签云
挺好的
服务器
浏览过的版块
Mysql
快速回复
返回顶部
返回列表