1.索引失效的情况
这是正常查询情况,满足最左前缀,先查有先度高的索引。
1.
注意这里最后一种情况,这里和上面只查询 name = '小米科技' 的命中情况一样。说明索引部分丢失!
2.
这里第二条sql中的,status > '1' 就是范围查询
3.
这里sql中对name索引进行了截取,导致索引失效。
4.
发送类型转换,导致索引失效。
5.
2.索引为什么失效
如图:多个键值的B+树,如果要排序的话,要先按照第一个元素的大小排序,在第一个元素相同的情况下,按照第二个元素进行排序,以此类推...
1.为什么要遵从最左前缀法则就很好理解了:如果跳过前面的元素,比如说直接使用联合索引中第二个元素进行查询,那么对于该索引,整个二叉树是无序的!
2.为什么范围查询右边的索引会失效:
这个例子中:我们尝试使用索引查询:a > 1,b = 1的数据。可以看到索引b完全就是无序的,这个无序不但体现在叶子节点,非叶子节点也是如此,整棵树都是如此。
3.模糊查询导致索引失效:我们知道 a like "%c%" 和 a like "%c" 都会导致索引失效。
这是因为索引如果按照字符串顺序排序,如:aab、aac、aad、baa、bab 都是先按照第一个字母排序,第一个字母相同的情况下按照第二个字母排序。如果使用"%c%" 和 "%c" 去匹配,都成无需的了,因为前面的字母没确定,和最左前缀法则类似。