MySQLSQL优化的正确姿势

大家好,我是知数堂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优化群有叶金荣,吴炳锡两位大神坐镇:

欢迎加入知数堂大家庭。

我的


转载请注明:http://www.aierlanlan.com/rzfs/775.html