MySQL慢查询优化之查询计划优化

社区服务
高级搜索
猴岛论坛电脑百科MySQL慢查询优化之查询计划优化
发帖 回复
倒序阅读 最近浏览的帖子最近浏览的版块
0个回复

[网络资讯]MySQL慢查询优化之查询计划优化

楼层直达
卖外挂死全家

ZxID:38322667

等级: 元老
遇到外挂直接举报,封杀外挂作者

举报 只看楼主 使用道具 楼主   发表于: 2018-12-19 0
MySQL慢查询优化之查询计划优化
            
以下图第一个SQL为例( explain {SQL})
结果为

具体线程意义参考官方文档:
https://dev.mysql.com/doc/refman/5.5/en/general-thread-states.html
(PC端复制链接打开)
MySQL的profile最多只能显示100个线程状态(在MySQL5.5的官方文档中也没有找到能改变显示个数的配置项),虽然看不全也可以看到MySQL的线程状态一直在executing、copying to tmp table、 sending data循环。性能一直消耗在从硬盘中取数据、复制到临时表运算,返回结果的过程中。
得到结论:最大的性能瓶颈在于存在嵌套子查询
知道了性能瓶颈,就有了问题的解决方案:在符合业务场景下,改写这句SQL,使用连接替代嵌套子查询,并结合上面提到的优化SQL的常用手段。
优化后的SQL语句:

这句话的查询执行过程是先将对user_org表做处理,查询出符合条件的userId,这里用到了in操作, 但是当in的数量超过1000时不能使用索引,所以进行了全表扫描,把结果存放到内存中临时表中,连接其他两张表时也都使用到了索引。在不分解联接下,比较难优化了。
再查看下这句SQL语句的线程执行过程:
« 返回列表
发帖 回复