大家好,我是知数堂SQL优化班老师网名:骑龟的兔子
已经很久没写文章了今天分享一篇优化SQL案例
slowquery里有如下SQL
看下执行计划如下
从执行计划可以看出C表全表扫描了
那我们看具体的SQL
从具体SQL中可以看出where条件里能达到好的过滤条件的应该是
B表,那先看下B表相关条件有没有索引
从上图所示,我们知道了是有索引的,那应该案例来说,B表应该当驱动表,但实际没有,而是C表当了驱动表为啥呢?
我们都知道MySQL是基于COST的优化器如果B当驱动表的话那连接顺序应该是B-A-C显然在这个过程中哪个地方的COST太高了所以最终没选择这个执行计划。
我们重点看下A-C的连接条件
我们看下这个连接条件所对应的C表的索引情况
从这可以看到C表对应的连接条件在索引里不是前导列,也就是第一个列
所以问题就出现在这里了。
那到此,我们先测试下,单独创建一个单列索引
然后看下执行计划
嗯达到了我们的预期效果。看下具体执行效果
我的新一轮的SQL优化课即将在春节后开课
我是知数堂SQL优化班老师~^^
如有关于SQL优化方面疑问和一起交流的请加并且
兔子知数堂SQL优化高性能MySQL,SQL优化群有叶金荣,吴炳锡两位大神坐镇:
欢迎加入知数堂大家庭。
我的