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

同样的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优化器,优化器分析出来的结果,不走索引成本更低,所以没有走索引,最终结果出乎意料。
 
日常排雷:mysql之不走索引,数量量小越慢?

 

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

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

 

参考文章:
 
 
 
 
 

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

上一篇:PLSQL_数据泵Datapump导入导出数据IMPDP / EXPDP(概念)(Oracle数据导入导出工具)[转]


下一篇:Mongodb学习笔记--使用java连接操作mongodb