日常排雷:mysql之不走索引,数量量小越慢?

时间:2020-05-06 20:45:19   收藏:0   阅读:396

同样的sql ,在不同的数据库上,执行效率不一致

 

现象:

mysql版本5.7

数据库引擎 innoDB

 

两个数据库表结构完全一致、索引一致

数据量有稍微不同

 

大致sql:

 select B.code from A h LEFT JOIN B on B.fk_id=A.id ;

 

走索引的数据情况

A表的数据为4w条

B表的数据为23条

 

查询时间0.3秒

 

不走索引的数据情况

A表的数据为4w条

B表的数据为5条

查询时间13秒

 

A表 id 为主键索引

B表为 fk_id 普通索引

 

EXPLAIN select B.code from A h LEFT JOIN B on B.fk_id=A.id ;

执行一看,“B表数据为5条” 的数据库 竟然不走索引!!

原来数量量小,还会影响查询速度,使查询速度变慢!!!

 

 
做为小白的我,立即查了下资料
 
原来是mysql执行分析器搞的鬼,mysql 用的是CBO优化器,优化器分析出来的结果,不走索引成本更低,所以没有走索引,最终结果出乎意料。
 
技术分享图片

 

为了验证是否是成本计算产生的问题,对 “B表数据为5条” 的数据库对应的表 insert 了18条数据,再查询,立即秒出 0.3秒

果然算法才是精髓啊,不好的算法只会坑爹~~

 

参考文章:
 
 
 
 
 

原文:https://www.cnblogs.com/xiaohouzixiashan/p/12837936.html

评论(0
© 2014 bubuko.com 版权所有 - 联系我们:wmxa8@hotmail.com
打开技术之扣,分享程序人生!