Mysql 性能分析及索引优化

一.概述

在日常开发中咱们最常接触的就是sql语句了,而往往性能的问题也都体现在sql的优化上。当数据量庞大的时候,sql的性能显得极其重要。
1.了解mysql 查询性能优化器
在这里插入图片描述
意思就是说我们写sql语句,到了mysql那里就不见得就会按我们说的一一执行,他可能会换一种更为高效的方式帮我们达到目的。(不管怎么说,查出来的结果会是我们需要的结果)

二.如何对sql进行一个性能评估?

Explain: explain可以说是一个mysql自带的工具,他可以反映出表的执行顺序等关键信息可以作为后期优化的参考。

在这里插入图片描述

(1)id:反映表的加载顺序

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
这张图需要解释一下,首先执行级别最高的id=2,从t3里查出了一张虚表(不是真实存在的表),然后顺序执行id=1的。(Derived虚表,衍生表)

(2)select_type : 查询类型

在这里插入图片描述
在这里插入图片描述

(3)type (注意):访问使用了哪种类型?

在这里插入图片描述
All: 全表扫面(最差的情况,如果数据量很大就必须做优化)。
const:表示通过索引一次就找到了,例如 select * from table where id = xxx;
在这里插入图片描述
eq_ref :只有一条记录匹配,工作中很少用到
在这里插入图片描述
ref (常用): 返回与索引值匹配到的所有记录, 例如
create index idx_name_age on table(name,age)
select * from table where name=‘xxx’;

这样就会返回name 是 xxx的所有记录,此时type 为 ref !
在这里插入图片描述
index: 使用索引进行全表扫描,也算不错的级别。至少不是All。
一般查询我们达到index,range级别就可以算是优化了。

(4)possible_keys 和 key

在这里插入图片描述
possible_keys : 意思就是本次查询可能用到的索引,但是实际不一定用上。
key : 本次查询真正用到的索引。type也是参考实际用到的索引做出评判。

在这里插入图片描述

(5)ref :显示哪些列或者常量(const)被用于查找索引列上的值。

(6)rows: 每张表有多少行被优化查询了。也是一个评判的重要指标。

(7)Extra :

面试的时候跟面试官重点介绍 id ,type ,ref ,rows ,extra.