工具介绍
- 模拟优化器执行SQL语句
- 分析你的查询语句或是结构的性能瓶颈
- 执行查询会返回执行计划的信息
- from 中包含子查询,仍会执行该子查询,将结果放入临时表中
type
- system:system是const的特例
- const:读取一次
- eq_ref:primary key 或 unique key 索引的所有部分被连接使用 ,最多只会返回一条符合条件的记录。这可能是在const 之外最好的联接类型了,简单的 select 查询不会出现这种 type。
- ref:相比 eq_ref,不使用唯一索引,而是使用普通索引或者唯一性索引的部分前缀,索引要和某个值相比较,可能会找到多个符合条件的行
- range:范围扫描通常出现在 in(), between ,> ,<, >= 等操作中。使用一个索引来检索给定范围的行
- index:通常扫描二级索引,扫描全索引拿到结果
- all:全表扫描,可以考虑通过增加索引进行优化
效率对比:system>const>eq_ref>ref>range>inex>ALL
1、system级别
A、只有一条数据的系统表
B、或衍生表只能有一条数据的主查询
很明显 实际开发当中 我们是不会只有一条数据的
2、const级别
仅仅能查出一条的SQL语句并且用于Primary key 或 unique索引;
SELECT * from shop where id=?
主键索引、唯一索引和unique索引达到这个级别,sql要根据公司的业务去写,这个情况也很难达到的。
3、eq_ref级别
唯一性索引:对于每个索引键的查询,返回匹配唯一行数据(有且只有1个,不能多,不能0);
此种情况常见于唯一索引和主键索引;
4、ref级别
非唯一性索引:对于每个索引键的查询,返回匹配的所有行(可以是0,或多个)。
5、range级别
检索指定范围的行,查找一个范围内的数据,where后面是一个范围查询 (between,in,> < >=);
in有时有可能会失效,导致为ALL;
6、index级别
把索引的数据全查出来 就是这个级别了
7、ALL级别
不走索引,就是ALL级别。