mysql in索引慢查询优化实现步骤解析

 更新时间:2023年05月12日 10:42:32   作者:刨红薯的小羊竿尔  
这篇文章主要为大家介绍了mysql in慢查询优化实现步骤的示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪

记一次mysql慢查询优化

生产环境待办列表现场演示5~6s才加载出来结果;顿时,产品经理的脸挂不住了,作为多年经验的老开发,心想完犊子,脸啪啪滴。

不过,秉着多年的江湖经验,遇事不慌,拍个照先。

第一步、分析SQL

 ***from event i 
 left join project p on i.project_id = p.project_code 
 left join dict d on i.type_id = d.id 
 left join record re on re.incident_id = i.id
 left join type it on it.id = i.type_id 
 where i.version_flag = 0 and i.flow_id in (大量条件)***

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

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

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

why?why?

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

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

event表的id的字符类型为:

image.png

record表的incident_id的字符类型为:

image.png

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

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

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

image.png

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

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

以上就是mysql in慢查询优化的详细内容,更多关于mysql in慢查询优化的资料请关注脚本之家其它相关文章!

相关文章

  • mysql执行时间为负数的原因分析

    mysql执行时间为负数的原因分析

    今天看到有人把phpmyadmin中的执行时间出现负数的情况视为phpmyadmin的bug, 其实这种情况的本质是php中浮点数(float)的精度问题。
    2010-08-08
  • 解析windows下使用命令的方式安装mysql5.7的方法

    解析windows下使用命令的方式安装mysql5.7的方法

    这篇文章主要介绍了windows下使用命令的方式安装mysql5.7的方法,本文图文并茂给大家介绍的非常详细,需要的朋友可以参考下
    2017-01-01
  • mysql中json基础查询详解(附图文)

    mysql中json基础查询详解(附图文)

    MySQL提供了一些函数来对JSON数据进行操作,下面这篇文章主要给大家介绍了关于mysql中json基础查询的相关资料,文中通过图文以及实例代码介绍的非常详细,需要的朋友可以参考下
    2023-10-10
  • mysql手动删除BINLOG的方法

    mysql手动删除BINLOG的方法

    用于删除列于在指定的日志或日期之前的日志索引中的所有二进制日志。这些日志也会从记录在日志索引文件
    2013-03-03
  • MySQL数据权限的实现详情

    MySQL数据权限的实现详情

    这篇文章主要介绍了MySQL数据权限的实现详情,文章通过实际案例,从代码实战的角度来实现这样的一个数据权限。具体详细介绍,具有一定的参考价值
    2022-08-08
  • Mysql事务并发脏读+不可重复读+幻读详解

    Mysql事务并发脏读+不可重复读+幻读详解

    这篇文章主要介绍了Mysql事务并发脏读+不可重复读+幻读详解,文章基于Mysql事务的相关资料展开对主题的详细介绍,具有一定的参考价值,需要的小伙伴可以参考一下
    2022-04-04
  • MySQL的增删查改语句用法示例总结

    MySQL的增删查改语句用法示例总结

    这篇文章主要介绍了MySQL的增删查改语句用法示例总结,是对MySQL学习的基本知识点的一个归纳,需要的朋友可以参考下
    2015-05-05
  • 创建mysql表分区的方法

    创建mysql表分区的方法

    我来给大家介绍一下mysql表分区创建与使用吧,希望对各位同学会有所帮助。表分区的测试使用,主要内容来自于其他博客文章以及mysql5.1的参考手册。
    2013-10-10
  • MYSQL where 1=1判定中的作用说明

    MYSQL where 1=1判定中的作用说明

    最近看到很多sql里用到where 1=1,原来觉得这没用嘛,但是又想到如果没用为什么要写呢?
    2011-09-09
  • IDEA找不到Database的完美解决方法

    IDEA找不到Database的完美解决方法

    IntelliJ IDEA中可以用database来连接数据库,但也会经常遇到问题,下面这篇文章主要给大家介绍了关于IDEA找不到Database的完美解决方法,文中通过图文介绍的非常详细,需要的朋友可以参考下
    2023-05-05

最新评论