MySQL高级-性能分析Explain
1、使用Explain关键字可以模拟优化器执行SQL查询语句,从而知道MySQL是如何处理你的SQL语句的。分析你的查询语句或是表结构的性能瓶颈 。
2、执行方法:Explain + SQL语句
解释:
①id:
select查询的序列号,包含一组数字,表示查询中执行select子句或操作表的顺序。
三种情况:
id相同,执行顺序由上至下
id不同,如果是子查询,id的序号会递增,id值越大优先级越高,越先被执行
id相同不同,同时存在
②select_type
常见和常用的值有6种
查询的类型用于区分 普通查询、联合查询、子查询等的复杂查询。
SIMPLE:
简单的select查询,查询中不包含子查询或者UNION。
PRIMARY:
查询中若包含任何复杂的子部分,最外层查询则被标记为PRIMARY
SUBQUERY:
在SELECT或WHERE列表中包含了子查询。
DERIVED:
在FROM列表中包含的子查询被标记为DERIVED(衍生),MySQL会递归执行这些子查询,把结果放在临时表里。
UNION:若第二个SELECT出现在UNION之后,则被标记为UNION,若UNION包含在FROM子句的子查询中,外层SELECT将被标记为:DERIVED
UNION RESULT 从UNION表获取结果的SELECT。
③type:取值为下面8种
type显示的是访问类型,是较为重要的指标,结果值从最好到最坏依次是:
system>const>eq_ref>ref>fulltext>ref_or_null>index_merge>unique_subquery>index_subquery>range>index>ALL。
工作中常见的有:
system >const >eq_ref >ref> rang>index> all
一般来说,得保证查询至少达到range级别,最好能达到ref。
④possible_keys 和 key
possible_keys:
keys:
⑤key_len
⑥ref
⑦rows
⑧Extra
应避免出现Using Filesort(文件排序)和using temporary(临时表) 这样会导致性能下降,排序应使用和索引一致顺序和列。
3、能干嘛
表的读取顺序
数据读取操作的操作类型
哪些索引可以使用
哪些索引被实际使用
表之间的引用
每张表有多少行被优化器查询
4、JOIN语句优化