MySQL的性能分析当然离不开explain关键字
用法
EXPALIN + sql 语句
explain能干嘛
1.表的读取顺序
2.数据读取操作的操作类型
3.哪些索引可以使用
4.哪些索引被实际使用
5.表之间的引用
6.每张表有多少行被优化器查询
分析explain结果
结果所包含的信息字段
一、id:
select查询的序列号,包含一组数字,表示查询中执行select子句或操作表的顺序,查询出来的id有三种情况
情况一:全部id相同
情况二:全部id不同
情况三:部分id相同,部分id不同
select_type:
查询的类型,主要是用于区别普通查询,联合查询,子查询等复杂查询。
table
显示这一行的数据是关于哪张表的
type
possible_keys
key
key_len
ref
rows
extra
useing filesort
说明mysql会对数据使用一个外部的索引排序,而不是按照表内的索引顺序进行读取。
MySQL中无法利用索引完成的排序操作称为"文件排序”
using temporary
使了用临时表保存中间结果,MySQL在对查询结果排序时使用临时表。常见于排序order by和分组查询group by。
using index
表示相应的select操作中使用了覆盖索引(Covering Index),避免访问了表的数据行,效率不错;
如果同时出现using where,表明索引被用来执行索引键值的查找;
如果没有同时出现using where,表明索引用来读取数据而非执行查找动作。
using where
表明使用了where过滤
using join buffer
使用了连接缓存
impossible where
where子句的值总是false,不能用来获取任何元组
select tables optimized away
在没有GROUPBY子句的情况下,基于索引优化MIN/MAX操作或者
对于MyISAM存储引擎优化COUNT(*)操作,不必等到执行阶段再进行计算,
查询执行计划生成的阶段即完成优化。