MySQL的索引什么时候会失效?


innoDB引擎里面有2种索引类型,一种是主键索引、一种是普通索引。innoDB使用了B+树的结构来存储索引数据,当使用索引列来查询数据的时候,最终会到主键索引树里去查询对应的数据行进行返回。

导致索引失效的原因有很种:

1、在索引列上做运算,比如说加函数,MySQL在生成执行计划的时候,他是根据统计信息来判断,是否要去使用索引的,加函数会导致MySQL无法识别索引列。但是在MySQL8.0开始,增加了函数索引,可以解决这个问题。

2、在一个由多列构成的组合索引里面,需要按照最左匹配法则,也就是说从索引最左列开始顺序进行检索否则也不会走索引。

3、使用like通配符匹配后缀,因为这种方式不符合索引的最左匹配原则,所以也不会走索引,所以一般我将通配符放在前缀来优化。

4、当索引列存在隐式转化的时候,比如说索引列是字符串类型,但是在SQL查询里,没有使用引号,然后MySQL会进行自动类型的转换,从而会导致索引失效

5、在索引列使用≠或者not查询时,由于索引的数据检所效率非常低,因此MySQL引擎会判断不走索引会更合适

6、使用or语句查询的时候,or语句前后没有同时使用的索引,所以也会失效,只有左右查询字段都使用索引的时候,所以才会生效

多表查询的场景里面呢,连接顺序也会影响索引使用,不过最终是否会走索引,我们可以使用explain命令,去查看当前SQL的执行计划,然后我们可以正对性的去进行调优,从而去提升SQL的执行效率。


分类:MySQL
标签: MySQL
文章目录