【MySQL】之 SQL 优化案例

news/2024/7/7 19:28:55

1、联合索引失效

项目上有个第三方账号绑定模块,对应的有张第三方账号记录表:

  • 表中有记录设备账号相关信息字段,如 app_id;
  • 有记录第三方平台账号的字段:weixin_id、qq_id、apple_id 等;

有次搞活动促销的时候,日志提示第三方账号登录这块出现了慢查询日志。那么我就去排查,慢查询日志提示的 SQL 如下:

select * from account 
where weixin_id ='xxx' or qq_id ='xxx' or app_id = 'xxx';

线上的数据表有五十多万条,然后我本地拉取了开发环境的数据,然后对数据量进行了模拟,最终执行该 sql 时发现耗时 1.5 秒。这结果还是我本地电脑跑出来的,线上并发的环境下,时间已经超过2、3秒了。

然后我用 explain 命令对这条 sql 进行分析,结果发现命中的索引字段 key、key_len 都为 null,扫描行数 rows 为全表行数。很明显,这是在执行过程没有使用索引导致了全表查询。

然后我查看了一下表的建索引情况,发现对应的查询字段是有建索引的:

KEY idx_union_id(weixin_id, qq_id, apple_id);

索引为联合索引,联合索引失效的场景无非就是没有遵循最左匹配原则,但我对比了一下索引的个数、顺序都和执行的 SQL 一样,虽然执行的 SQL 使用的是 or 关键字来连接字段,但它遵循了联合索引的最左匹配原则还不至于导致索引失效。

但我仔细对比了字段发现,执行的 sql 语句中有个字段 apple_id 写成了 app_id。这下就真相大白了,app_id 字段没有加索引,所以在 or 条件查询下执行就导致了索引失效而引发全表扫描。

最后更正过来后再次测试,结果耗时只有零点几秒了。


http://lihuaxi.xjx100.cn/news/1278293.html

相关文章

arcpy制作脚本工具相关(制作并添加脚本工具、脚本工具消息提示、arcpy工具自动获取数据)

前言 采用arcpy制作arcgis的脚本工具,记录如下。 一、脚本工具的制作 制作脚本工具分为两步: 1、先编写对应功能的python脚步 2、将对应功能的脚本修改为,能自己手动选择输入输出数据的脚本 3、将修改完的脚本添加到工具箱 1、编写代码 我…

在Microsoft Excel中如何使用ISEVEN函数

Excel 中的 ISEVEN 函数在值为偶数时返回 TRUE,在值为奇数时返回 FALSE。如果值不是数字,ISEVEN 将返回 #VALUE 错误。 ISEVEN 函数测试偶数。ISEVEN 接受一个参数 value,该参数应该是数值或单元格引用。只计算值的整数部分,截断十进制值。 使用ISEVEN函数 ISEVEN 函数返回…

【哈士奇赠书活动 - 28期】- 〖产品经理就业实战〗

文章目录 ⭐️ 赠书 - 《产品经理就业实战》⭐️ 内容简介⭐️ 作者简介⭐️ 编辑推荐⭐️ 赠书活动 → 获奖名单 ⭐️ 赠书 - 《产品经理就业实战》 ⭐️ 内容简介 本书专门为想要入行从事产品经理相关工作的零基础就业人员而编写,涵盖了在产品准备阶段、产品开发阶…

kubenetes无法启动,检查后发现api-server证书失效

先用docker ps -a 查看最近docker容器是否正常运行,发现api-server的容器刚刚退出。 然后查看他的日志: docker logs [api-server-id] 显示错误 docker:x509:certificate has expired or is not yet valid 使用kubeadm安装k8s时&#xff…

一篇文章告诉你什么是—Selenium的元素等待

前言 今天我们来说说selenium的元素等待,废话不多说直接开始吧。 1、元素等待介绍 WebDriver定位页面元素时如果未找到,会在指定时间内一直等待的过程。为了保证脚本运行的稳定性,需要脚本中添加等待时间。 2、为什么要设置元素等待 在元…

Reactor的概念

一、Reactor的概念 ​ Reactor模式是一种事件驱动模式,由一个或多个并发输入源(input),一个消息分发处理器(Initiation Dispatcher),以及每个消息对应的处理器(Request Handler)构成…

前端实现页面自动播放音频方法

前提 需要页面自动播放一段报警声音,将audio标签的autoplay属性设置为true,发现自动播放失败,并出现如下报错: Uncaught (in promise) DOMException: play() failed because the user didn’t interact with the document first.…

数据中心供配电监控系统解决方案介绍 安科瑞 许敏

摘 要:供配电系统始终是数据中心比较重要的内容,在供配电系统能够得到平稳安全的运行的时候,才能够促使数据中心的相关设备具有比较可靠的动力源泉。在新型数据中心不断发展的过程中,其功率密度也相对比较大,对供电的要…