字节二面:你们是如何做Mysql慢查询优化的。Mysql执行计划详解!


前言

慢查询优化对于提高MySQL数据库的性能和稳定性非常重要,大家在日常开发工作中一定会遇到速度比较慢的SQL语句,从而使得系统性能受到比较大的影响。慢查询优化也是面试中非常经常被问到的知识点!


一、如何做慢查询优化

Mysql慢查询优化主要就是首先定位慢查询。之后查看执行计划,对指定语句进行分析和优化,从而提升性能。

步骤为:

  • 开启数据库慢查询日志定位慢查询SQL
  • 使用explain进行语句分析
  • 根据执行计划的内容来针对性优化语句

二、执行计划

1. 什么是执行计划?

MySQL执行计划是MySQL数据库系统在执行SQL语句时生成的详细计划,用于描述如何执行该语句,包括每个步骤的执行顺序、数据访问方式、操作类型等。

执行计划提供了有关查询性能的有价值信息,例如查询优化器选择了哪些索引、执行顺序、使用了哪些子查询、使用了哪些连接等。通过分析执行计划,开发人员可以识别潜在的性能问题,并优化查询以提高性能。

在MySQL中,可以使用EXPLAIN语句来获取查询的执行计划。

三、执行计划详解

1. 如何使用执行计划?

在MySQL中,可以使用explain + sql语句来看到该条语句的执行计划。

2. 执行计划参数列表

在MySQL中,可以使用explain + sql语句来看到该条语句的执行计划。

可以看到我们在查看执行计划后出现了如下结果:
在这里插入图片描述

有如下内容:

参数描述
id查询的id列表,如果musql执行了多次会有多条记录,id越小表示越先执行
select_type描述了该语句的查询类型,包括简单查询、子查询等等
table查询涉及的表名
partitions查询分区,如果表是分区表的时候会有结果,一般为空
type查询访问表的方式。它提供了关于查询优化器如何处理查询的信息
possible_keys可能使用到的索引
key实际使用到的索引
key_len使用的索引长度
ref表示查询优化器在执行查询时使用了哪些索引来访问表
rows预计查询需要扫描的行数
extra额外的执行信息,如排序、分组、使用临时表等

查看执行计划后,主要需要关注它的索引命中情况key字段(若该字段不存在,那么优化目标就很明确了,首先需要添加索引并命中)、row字段表示行数,理论行数越小查询越快、以及tyep、ref、extra字段,这三个字段的内容标记会比较多,需要额外关注和了解。

下面就详细介绍下这几个字段:

type字段:

type字段表示查询优化器为查询选择的访问类型,type字段的常见值如下:
图片

查询效率ALL最慢,eq_ref最快。所以我们在慢查询优化中,需要关注该字段来了解查询优化器的访问类型,优化目标根据业务来看,一般要优化为range,对应扫描的row字段也会变小,查询耗时肯定也是会有明显提升。

ref字段:

通过分析ref字段,可以了解查询优化器在执行计划中使用了哪些索引来进行查找。这可以帮助您确定是否使用了正确的索引、是否可以通过更改查询或索引来提高性能等。

ref字段主要的内容如下,除了下面常见的值之外,ref字段还可能包含其他值,例如函数名、别名等。这些值表示查询优化器在执行计划中使用了特定的索引或函数来进行查找。

在这里插入图片描述

Extra字段:

extra的字段内容比较多,是额外信息,有时候我们在排查一些慢查询的问题时比较重要,明明命中了索引可还是比较慢,可能可以在extra找到原因,比较额外的排序filesort可能会导致查询缓慢。extra主要内容如下:

图片

四、总结

其实mysql慢查询优化并不复杂,熟悉了执行计划之后,去进行索引方面的优化就行了,然后再根据执行计划就可以明确的知道优化效果了。掌握了执行计划,再也不怕面试的时候被问到数据库优化了!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Java码农杂谈

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值