首页 > 技术文章 > Mysql 索引失效

wu-song 原文

1. 主键失效

主键是int自增类型

看如下2条sql:


查询条件没有加引号,导致全表扫描,非常耗时。
还有一种情况,如果索引是字符串类型,查询条件没有加引号也是会失效的
https://dev.mysql.com/doc/refman/5.5/en/type-conversion.html

2. 多表join查询按照主表ID排序,索引失效

如图,hotel_info 中二十多万数据,连了3张关联表,其中 hotel_supplier_vender_relationhotel_supplier_management 只有2条和4条数据。因为最开始是生成环境报的查询速度慢的问题。因为表结构都一样,最开始怀疑是mysql版本的问题,因为生成环境是5.6,而测试环境是5.7,比较5.7做了很多优化。

但是关于索引失效应该不是版本的问题,于是做了个实验。将测试环境表结构和数据导一份到本地,将2张关联表的数据不断减少,当减少到每张表都为7条的时候,奇迹出现了。此时不管减少一条哪张表的数据,都会出现索引失效的问题。

此时可以强制走索引,或者在表中增加数据都可以解决问题(ps:生成环境不是你想加就能加的)。

不积跬步,无以至千里

推荐阅读