6种索引失效的情况:

1.当我们使用左或者左右模糊匹配时,也就是 like %xx 或者 like %xx% 这两种方式都会造成索引失效

2.当我们在查询条件中对索引使用函数,也是无法走索引的

3.当我们在查询条件中对索引列进行表达式计算时,也是无法走索引的

4.Mysql在遇到字符串和数字比较时,会自动吧字符串转为数字,然后进行比较。如果字符串是索引列,而条件语句中输入参数是数字的话,那么索引列会发生隐式类型转换,由于隐式类型转换是通过CAST函数实现的,等同于对索引列使用了函数,就会导致索引失效

5.联合索引要能正确使用需要遵循最左匹配原则,也就是按照最左优先的方式进行索引的匹配,否则就会导致索引失效

6.在Where子句中,如果Or前的条件列是索引列,而Or后的条件列不是索引列,那么就会索引失效

 

一.索引存储结构长什么样

  索引的存储结构跟Mysql使用哪种存储结构有关,因为存储引擎就是负责将数据持久化到磁盘中,而不同的存储引擎采用的索引数据结构也不会相同

  Mysql默认的存储引擎是InnoDB,它采用的B+Tree作为索引的数据结构,在创建表时,InnoDB存储引擎会默认创建一个主键索引,也就是聚簇索引,其他索引都属于二级索引

  Mysql的MyISAM存储引擎支持多种索引数据结构,比如B+树索引,R树索引,Full-Text索引,MyISAM存储引擎在创建表时,创建的主键索引默认使用的是B+树索引

  虽然InnoDB和MyISAM都支持B+树索引,但是它们数据的存储结构实现方式不同:

    InnoDB存储引擎:B+树索引的叶子节点保存数据本身

    MyISAM存储引擎:B+树索引的叶子节点保存数据的物理地址