** 答案是ABCD?不是很确定,求大佬解答**
2条回答 默认 最新
- little_how 2019-05-16 12:03关注
只有A用了
这里就给你简单的解释一下mysql索引原理;
还有就是你可以先了解一下Btree,这样更容易了解;
1.mysql在innodb的存储引擎下使用的是btree索引,包括主键的聚簇索引和普通
的二级索引;
2.因为索引是用的btree,所以索引的叶子节点是按照索引键的顺序存储的;
3.2中提到的索引键的顺序,也就是通过比大小来存储,默认的字符串比大小是用ascii,而数字我就不多说了吧;
4.联合索引的建立是严格按照索引的顺序建立的;
然后现在来讲答案是为什么了;
A:答案条件是B and A的等号形式,mysql的查询优化器会将条件转换成B and A来进行查询,满足联合索引的从左到右;索引完美的用到了联合索引;
B:答案中只有到的B字段作为查询条件,不符合联合索引的从左到右
多说一句为什么联合索引是从左到右,因为btree索引在插入删除等时,是先从左边的字段开始比较大小,然后找到插入位置,然后再依次往右比较
C : 答案虽然用到了A字段,理论是可以用到索引的,但是mysql在几种情况下索引会失效,而使用表达式恰好是其中一种,tochar,substring,A + 2 =5这种都不可以,可以把表达式放在等号右边,如 A= 5 +2这样就可以用到联合索引中的A字段索引D : 答案虽然也用到了A字段,但是用了like作为查询条件,也并不是说like就一定用不到索引,开始一直说了,索引的比较,如字符串的比较是ascii,而ascii
的比较方式是从左往右比较,如abc、abd、acd比较是先比第一位a,发现相同,再比第二位b和c,b相同再比;所以如果想要like的时候索引生效,那么必须是前缀表达如A like 'Y%'这种形式就可以用到索引,而'%Y'这种形式明显索引不知道前面的值就不可以做比较来判定;
这里只是简单的说明为什么答案中哪些使用了索引,哪些不能使用,想要理解本质,就得知道btree原理以及mysql的innodb存储引擎下的索引结构和原理;
希望可以帮到你....本回答被题主选为最佳回答 , 对您是否有帮助呢?解决 无用评论 打赏 举报