sql优化

表结构如下: 

 待优化sql执行情况如下:

去掉其中一个不带索引的字段执行结果如下:

 查看执行计划:

 尝试强制走callOutTime索引时间更长了: 

《回头看》:不走索引和强制走索引之后时间更长的原因可能是:mysql判断使用callOutTime时 需要回表的成本已经大于全表扫了 所以没有走索引

 尝试用子查询发现子查询也没有走索引:

 

《回头看》:走个鬼啊,都说了回表啦

 联合索引

ALTER TABLE CallOutRecord  ADD INDEX idx_time_callCseq (callOutTime,callCseq);

 

 

快了一些但还不够

《回头看》:加了联合索引后,不用回表了,走了覆盖索引然后在服务器层进行的where过滤

 

另一个sql:

用了sum之后就不走索引了:

发现与linkTime有关,所以进一步将开始的2字段的联合索引扩展至3字段,但是有又发现一个问题:

 

删除索引,更改组合顺序:

 

可以考到type一个是index一个是range,且filtered也不同

 

posted @ 2020-01-19 20:25  l2c  阅读(154)  评论(0)    收藏  举报