如何避免MySQL索引失效?

MySQL的索引失效问题,网上一搜就有一大堆的文章,并不是什么新鲜的东西。

但是如果有这样一种场景,假如我在innoDB的一张表当中建了索引,我也用索引字段当做where条件去查询了。

并且几乎规避了所有索引可能失效的情况。

第一,我没有用错数据类型,没有导致(隐式)类型转换。

第二,我没有like去做模糊查询。

第三,我没有对查询条件做计算,也没有使用任何函数。

第四,我的SQL语句当中也没有or操作,也没有不等于操作。

第五,已完全符合对左前缀匹配原则,并且没有进行is not null等这些判断。

第六,还有就是没有进行范围查询。

基本上避免了那些可能导致索引失效的各种问题。

那么经过执行计划分析发现还是没有走索引是怎么一回事呢?

其实还有一种被忽略的可能性,那就是MySQL其实会对查询进行优化,也就是说要不要使用索引来检索数据,是由MySQL通过判断不同的执行计划的代价来决定的。

如果MySQL认为全秒扫描的效率更高,比如说对一些很小的表进行查询的话,它可能就不会使用索引。

对于这种情况,当然也可以使用force index来强制要求MySQL使用指定的索引进行查询。

本文由《MySql教程网》原创,转载请注明出处!https://mysql360.com