(二)Mysql调优小技巧-解析执行计划

执行计划就是使用explain关键字,来模拟执行的sql语句,从而知道mysql是如何处理sql的,通过查询结果可用于分析查询语句或表结构的性能瓶颈,从而针对性的优化sql语句。

执行计划的语法:EXPLAIN select* from tb;

 

(二)Mysql调优小技巧-解析执行计划

下面开始分别对

id列:描述select查询的***,表示select执行语句或者操作表的顺序。

id列相同的情况:

(二)Mysql调优小技巧-解析执行计划

id不同的情况

(二)Mysql调优小技巧-解析执行计划

 

从以上结果得出,id值越大,优先级越高,越先执行。

key列:查询中使用到的索引。

key_len列:此列可以看出索引是否被充分使用,变涉及到key_len的算法,以字符型型为例,字符型的索引长度,其长度=本身长度*字符集长度+字符类型+是否为空。

其中.字符集uft-8 占3个字节。字符类型 varchar加2,char+0,是否为空nul加1,not null+0;

(二)Mysql调优小技巧-解析执行计划

(二)Mysql调优小技巧-解析执行计划

所以key_len = 10*30++0+0=30

索引优化原则:

1,尽量全职匹配。

(二)Mysql调优小技巧-解析执行计划

(二)Mysql调优小技巧-解析执行计划

从key列中可以看出,使用索引idx_staffs_nameAgePos,根据key_len的长度可以看出已经完全使用了索引,因为key_len=(24*3+2+0)+(20*3+2+0)+4=140

2.尽量遵循最佳左前缀法则。指的是查询条件从索引的最左前列开始,不能跳过索引中的列。

(二)Mysql调优小技巧-解析执行计划从上图可以看出ref列可以看出,pos字段的索引已经失效。

3.不在索引列做任何操作。

(二)Mysql调优小技巧-解析执行计划

对name进行操作,索引失效。

4.创建索引的时候,范围条件放后面。

(二)Mysql调优小技巧-解析执行计划

将范围条件放前面,看到key_len的长度为152

(二)Mysql调优小技巧-解析执行计划

将范围条件放放后面,看到key_len的长度为491,索引被充分用到。

5.尽量使用覆盖索引,减少select *

(二)Mysql调优小技巧-解析执行计划

(二)Mysql调优小技巧-解析执行计划

6.null/not null对索引会有影响,不过也分情况,在字段为not null的情况下,使用is null或者is not null 会导致索引失效。在字段为null的情况下,或者不定义,is not null的情况会导致索引失效,解决办法就是使用覆盖索引。

(二)Mysql调优小技巧-解析执行计划7.使用like查询的时候,尽量使用覆盖索引,否则会导致索引失效。

(二)Mysql调优小技巧-解析执行计划

(二)Mysql调优小技巧-解析执行计划8.如果字段是字符类型加引号

9.尽量避免使用or,可将or改为union,效率会更高,如果一定要使用or,可使用覆盖索引的方式。