基本使用explain分析SQL

发布时间 2023-07-07 16:54:14作者: TIGZzr


一、慢查询explain分析的基本思路

explain命令是分析慢查询的一个常用方式,可以用来分析select 语句的运行效果,通过explain命令可以得到下面这些信息: 表的读取顺序,数据读取操作的操作类型 ,哪些索引可以使用,哪些索引被实际使用,表之间的引用,每张表有多少行被优化器查询等信息。

一般,使用explain分析问题主要从以下三个方面分析:

当前查询是否走了索引?

走的索引是不是期望的?

索引还有没有改进的空间,sql还有没有优化的余地?

这三点通过explain返回的各种字段来做分析,一般优化后需要反复查看explain来作出最后的选择。

二、explain返回字段详解

 

三、索引优化的原则以及失效情况举例

建立索引

 

优化索引

 

索引失效

 

四、通过explain优化sql的基本思路

 

五、知识补充

一条查询语句在经过MySQL查询优化器的各种基于成本和规则的优化会后生成一个所谓的执行计划,这个执行计划展示了接下来具体执行查询的方式,比如多表连接的顺序是什么,对于每个表采用什么访问方法来具体执行查询等等。

查询成本

一个查询可以有不同的执行方案,可以选择某个索引进行查询,也可以选择全表扫描,查询优化器会选择其中成本最低的方案去执行查询。

IO成本

InnoDB存储引擎都是将数据和索引都存储到磁盘上的,当我们想查询表中的记录时,需要先把数据或者索引加载到内存中然后再操作。这个从磁盘到内存这个加载的过程损耗的时间称之为I/O成本。

cpu成本

读取以及检测记录是否满足对应的搜索条件、对结果集进行排序等这些操作损耗的时间称之为CPU成本。

计算规则

InnoDB存储引擎规定读取一个页面花费的成本默认是1.0,读取以及检测一条记录是否符合搜索条件的成本默认是0.2。