最左匹配原则中的范围查询问题
来源:3-9 索引额外问题之最左匹配原则的成因
小小de
2019-12-22
老师,
1、比如说,where a =1 and b =1 and c >1 and d =1,联合索引是(a,b,c,d)。其实用的是(a,b,c),那么遇到c>5时候是索引结束直接用到叶子结点的链路指针了吗?是因为c>1可能不可枚举,然后对导致索引过于大,所以d没有进行索引吗?
2、比如说,where a =1 or c =1 and b =1 ,联合索引是(a,b,c)。那这样的话b也不能提前吧,提前就变成where a =1 and b =1 or c =1 逻辑就不对了吧?
写回答
2回答
-
慕雪0079161
2019-12-22
c这列还是用到了索引,d这列用不到索引,因为d的顺序是相对于c的,索引在c这里中断,所以d用不了联合索引。
or关键字前后如果都具备索引,索引不会失效。联合索引是(a,b,c) ,a =1 or c =1 and b =1 不会用到索引
112019-12-23 -
翔仔
2019-12-23
同学好,
1、mysql创建复合索引的规则是首先会对复合索引的最左边的,也就是第一个a字段的数据进行排序,在第一个字段的排序基础上,然后再对后面第二个的b字段进行排序,如果此时c是范围查询的话,则没法获取到有序的d,因此是不行的。具体可以看看这篇
https://www.zhihu.com/question/36996520/answer/93256153
2、这个是肯定的,mysql解析器调整顺序的前提是按照程序的幂等性,也就是保证取到的结果是一样的,即保证逻辑判断的有序性
00
相似问题