mysql联合索引怎样才会命中

写这篇文章是因为读到一篇关于联合索引在B+树上的存储结构和查找方式的文章

https://www.cnblogs.com/ibigboy/p/12373978.html

而做了一些相关的实验来验证猜想。

下面来进行sql语句实验:

1. select r.* from my_test r where r.a = '1' and r.b = '8' and r.c = 'a'; 该情景命中了索引

2.select r.* from my_test r where r.a = '1' and r.c = 'a'; 该情景下也命中索引

3.select r.* from my_test r where r.b = '8' and r.c = 'a'; 该情景下未命中索引

4.select r.* from my_test r where r.a = '1' and r.b = '8' ; 该情景下也命中索引

5.select r.* from my_test r where r.a = '1' ; 命中索引

6.select r.* from my_test r where r.b = '8' ; 未命中索引

7.select r.* from my_test r where r.c = 'a' ; 未命中索引

总结:通过以上几种场景,凡是违背了最左前缀匹配原则的都未命中索引,创建了(a,b,c)三列联合索引,相当于创建了(a,b,c)、(a,b)、(a)三个索引,联合索引是首先使用多列索引的第一列构建的索引树,所以会丛a列开始查找,a列相同再找b列,以此类推。综上所述,能否命中索引,要结合是否满足最左前缀匹配原则来看。

 

posted @ 2022-03-11 17:13  奔跑小王子  阅读(474)  评论(0编辑  收藏  举报