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慢查询优化的资料请关注脚本之家其它相关文章!

相关文章

  • 如何解决docker无法启动的问题

    如何解决docker无法启动的问题

    这篇文章主要介绍了如何解决docker无法启动的问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-09-09
  • MySQL数据库分区功能的使用教程

    MySQL数据库分区功能的使用教程

    这篇文章主要介绍了MySQL数据库分区功能的使用教程,文中特别讲解了MySQL分表和分区的区别以及联系,需要的朋友可以参考下
    2016-05-05
  • MySQL 字符串拆分操作(含分隔符的字符串截取)

    MySQL 字符串拆分操作(含分隔符的字符串截取)

    这篇文章主要介绍了MySQL 字符串拆分操作(含分隔符的字符串截取),具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2021-02-02
  • mysql 数据汇总与分组

    mysql 数据汇总与分组

    这篇文章主要介绍了mysql 数据汇总与分组,我们经常需要汇总数据而不用把它们实际检索出来,为此MySQL提供了专门的函数。使用这些函数,MySQL查询可用于检索数据,以便分析和报表生成。下面来看看具体例子,需要的朋友可以参考一下
    2021-10-10
  • 对MySQL中字符集的相关设置操作的基本教程

    对MySQL中字符集的相关设置操作的基本教程

    这篇文章主要介绍了对MySQL中字符集的相关设置操作的基本教程,重点讲解了修改MySQL字符集的方法,需要的朋友可以参考下
    2015-12-12
  • mysql查线上数据注意数据库的隔离级别

    mysql查线上数据注意数据库的隔离级别

    数据库的隔离级别关乎事务对其他并发事务的可见性及其对数据库的影响,隔离级别的选择决定了并发性能和数据一致性的平衡,SQL标准定义了四种隔离级别,每种级别都有不同的应用场景和防止并发问题的能力,感兴趣的可以了解一下
    2024-10-10
  • 通过唯一索引S锁与X锁来了解MySQL死锁套路

    通过唯一索引S锁与X锁来了解MySQL死锁套路

    毫不夸张的说,有一半以上的死锁问题由唯一索引贡献,后面介绍的很多死锁的问题都跟唯一索引有关。这次我们讲一段唯一索引 S 锁与 X 锁的案例,下面小编来和大家一起学习一下
    2019-05-05
  • MySQL Flink实时流处理的核心技术之窗口机制

    MySQL Flink实时流处理的核心技术之窗口机制

    Flink是一款流处理框架,窗口机制是其核心技术之一。Flink的窗口机制可以将无限的数据流划分为有限的窗口,并对窗口内的数据进行处理。Flink的窗口机制支持时间、计数、会话等多种窗口类型,并且可以在不同的窗口之间进行流转换和数据聚合,是实时流处理中非常重要的技术
    2023-05-05
  • MySQL 中如何归档数据的实现方法

    MySQL 中如何归档数据的实现方法

    本文主要介绍了MySQL 中如何归档数据的实现方法,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-03-03
  • Mysql SSH隧道连接使用的基本步骤

    Mysql SSH隧道连接使用的基本步骤

    这篇文章主要给大家介绍了关于Mysql SSH隧道连接使用的基本步骤,文中通过示例代码介绍的非常详细,对大家学习或者使用Mysql具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
    2019-05-05

最新评论