项目刚刚告一段落,boos又让优化几个主要界面函数
程序代码方便的优化就不讲了,主要说MySQL的优化优化
首先查看explain执行计划,让主要查询语句使用索引,索引type级别最好达到ref | ref_eq级别spa
其次将extra一栏的Using temporary(临时表)、Using filesort(文件排序)拖出去砍了.net
第一条语句3d
explain
select * from tb_wm_shop where is_delete != 1 and is_authentication = 1 ORDER BY create_time DESCblog
你们应该知道使用order by的 字段要使用索引,这条语句中create_time已经建立了索引,可是计划中并无使用该索引,致使出现了Using filesort文件排序,使其查询变慢排序
解决方法以下:索引
从where条件开始,依照顺序建立一个组合索引,就能够砍掉Using filesort这个使人讨厌的头颅了get
注意:必须依照顺序,在建立组合索引时,where条件的字段在orderBy的字段以前,若是orderBy是多字段,则必须依照顺序建立it
详情可参考连接:http://www.javashuo.com/article/p-evonndrz-bb.html
第二条语句
explain
select s.* from tb_wm_popularize p left join tb_wm_shop s on p.shop_id = s.id where s.is_delete != 1 AND p.type = 1 order by s.sale_num desc
这条语句就比较讨人厌了,同时出现了Using temporary(临时表)、Using filesort(文件排序)
一个小时的百度,找到了缘由
其一,参考:https://www.iteye.com/blog/hudeyong926-785181
发现了错误一:左联接表时,若是orderBy使用的字段是第二张表的字段就会照成Using temporary,修改语句如下是结果
发现结果仍是没变,通过确认以上连接的真实性,引出了第二个问题:
and p.type = 1 这个致使了查询以后又将p 表 引为了第一张表,致使第一个问题解决以后任然没有生效,就有了如下改动:
如今临时表没有了,开始解决剩下的Using filesort
上面已经说了,创建一个sale_num的索引就能够了,不过个人语句里面还有一个错误,就是 != 会致使语句不走索引,因程序业务逻辑符合条件 改成is_delete = 0完成优化
至于上面所说的 != 致使不走索引,目前没有发现什么好的方法解决,百度出来有一种方法是经过union函数将大于 和小于链接起来
可是个人语句中由于还须要排序,因此会形成另外一个额外表,故不采用!
若是哪位大神知道还有其余方法解决,请留言告知,感激涕零!