索引是排好序的数据结构(B+Tree、Hash等)。索引失效本质上存储引擎无法在数据结构上找到该字段排序或者存储引擎认为全表扫描更加高效。
对于组合索引来说,前一个字段使用in、<>会使后面字段无序,造成索引失效。中间字段范围查询会使后面字段无序,造成部分索引失效。
对于非组合索引来说,like前端使用通配符需要扫描整个索引树,造成索引失效。如果仅仅中间使用通配
符不会失效。同时使用in、<>大范围查询,即使可以使用索引,存储引擎会认为全表扫描更加高效。
在索引列上计算会破坏原有的有序结构,无法使用原有的索引,造成索引失效。