MySQL索引优化分析之性能分析
一、MySQL Query Optimizer
二、MySQL常见瓶颈
三、Explain(执行计划)
1、什么是执行计划?
2、执行计划能干什么?
3、执行计划怎么使用?
4、执行计划中各字段解释
--------------------------------------------------------------------------------------------
一、MySQL Query Optimizer
二、MySQL常见瓶颈
三、Explain(执行计划)
1、什么是执行计划?
使用Explain关键字可以模拟优化器执行SQL查询语句,从而知道MySQL如何处理你的SQL语句。分析你的查询语句或是表结构的性能瓶颈。
2、执行计划能干什么?
(1)表的读取顺序(2)数据读取操作的操作类型(3)哪些索引可以使用(4)哪些索引被实际使用(5)表之间的引用(6)每张表有多少行被优化器查询PS:(1)select_type:数据读取操作的操作类型(2)possible_keys:哪些索引可以使用(3)key:哪些索引被实际使用(4)rows:每张表有多少行被优化器查询(rows越少越好)
3、执行计划怎么使用?
1)Explain+SQL语句 2)执行计划包含的信息
4、执行计划中各字段解释
字段1:id:
1)select查询的序列号,包含一组数字,表示查询中执行select子句或操作表的顺序。
2)三种情况:
第一种情况id相同:执行顺序由上而下;
第二种情况id不同:如果是子查询,id的序号会递增,id值越大优先级越高,越先被执行
第三种情况id相同和不同,同时存在
字段2:select_type
字段3:table
显示这一行的数据是关于哪张表的
字段4:type
字段5:possible_keys
理论上用到的索引。
字段6:key
实际用到的索引。
字段7:key_len
字段8:ref
字段9:rows
字段10:extra
extra:包含不适合在其他列中显示但十分重要的额外信息。常见的有:(1)using filesort(2)using temporary(3)using index(4)using where(5)using join buffer(6)impossible where(7)select tables optimized away(8)distinct
PS:Using temporary:使用了临时表保存中间结果,MySQL在对查询结果排序时使用临时表,常见于排序order by和分组查询group by。
1、Using filesort
2、Using temporary
PS:group by尽量根据索引的个数和顺序来,否则会产生文件列排序和临时表(using filesort、using temorary),影响查询性能。
3、Using index
4、using join buffer
使用了链接缓存
5、impossible where
where子句的值总是false,不能用来获取任何元组