当前位置: 首页 > MySQL数据库

mysql in慢查询如何优化

时间:2026-01-26 14:21:21

第一步、分析SQL

***fromeventileftjoinprojectponi.project_id=p.project_codeleftjoindictdoni.type_id=d.idleftjoinrecordreonre.incident_id=i.idleftjointypeitonit.id=i.type_idwherei.version_flag=0andi.flow_idin(大量条件)***复制代码

当flow_id in接入大量条件,sql直接变慢,由之前的80ms到5.8秒,另外此处,关联表较多。

第二步、检查索引,执行explain

当我们检查索引发现re.incident_id和i.flow_id并没有走索引,so,大喜,问题找到了,建索引;然而执行SQL,发现并卵!机智如我,直接打开explain,发现record的type为all,赤裸裸的没走索引啊。

第三步、检查两个关联字段的字段类型、长度和字符类型是否一致

当比较字段类型和字段长度发现完全一致,短暂的郁闷之后,发现了新的线索——

event表的id的字符类型为:

record表的incident_id的字符类型为:

果断统一使用utf8mb4与项目组保持统一;再次explain,耗时瞬间低至1秒之内,手工。

第四步、强制使用索引操作

mysql在一个表如果索引基数过小的情况下默认会走全文搜索,所以对于表业务量过大,但是索引字段基本上为同一数据或null的情况 还是需要在sql中写死强制索引;在sql中使用强制索引解决办法 left join 后添加 force index(alarm_id)——

第五步、IN通常是走索引的

只有当IN后面的数据在数据表中超过30% 的匹配时是全表扫描,不走索引,因此IN走不走索引和后面的数据量有关系。in大量数据可以使用left join来处理。


上一篇:MySQL索引设计原则有哪些
下一篇:MySQL必须了解的关键字有哪些
mysql
  • 英特尔与 Vertiv 合作开发液冷 AI 处理器
  • 英特尔第五代 Xeon CPU 来了:详细信息和行业反应
  • 由于云计算放缓引发扩张担忧,甲骨文股价暴跌
  • Web开发状况报告详细介绍可组合架构的优点
  • 如何使用 PowerShell 的 Get-Date Cmdlet 创建时间戳
  • 美光在数据中心需求增长后给出了强有力的预测
  • 2027服务器市场价值将接近1960亿美元
  • 生成式人工智能的下一步是什么?
  • 分享在外部存储上安装Ubuntu的5种方法技巧
  • 全球数据中心发展的关键考虑因素
  • 英特尔与 Vertiv 合作开发液冷 AI 处理器

    英特尔第五代 Xeon CPU 来了:详细信息和行业反应

    由于云计算放缓引发扩张担忧,甲骨文股价暴跌

    Web开发状况报告详细介绍可组合架构的优点

    如何使用 PowerShell 的 Get-Date Cmdlet 创建时间戳

    美光在数据中心需求增长后给出了强有力的预测

    2027服务器市场价值将接近1960亿美元

    生成式人工智能的下一步是什么?

    分享在外部存储上安装Ubuntu的5种方法技巧

    全球数据中心发展的关键考虑因素