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

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

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

 

下面开始分别对

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

id列相同的情况:

id不同的情况

 

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

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

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

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

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

索引优化原则:

1,尽量全职匹配。

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

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

从上图可以看出ref列可以看出,pos字段的索引已经失效。

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

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

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

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

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

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

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

7.使用like查询的时候,尽量使用覆盖索引,否则会导致索引失效。

8.如果字段是字符类型加引号

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值