最左优先就是说组合索引的第一个字段必须出现在查询组句中,MySQL引擎都会自动调用索引来优化查询效率。
    遇到范围查询(>、<、between、like)就会停止匹配,

    示例:
    alter table 表名 add index 索引名(a,b,c)
    实际建立了(a)、(a,b)、(a,b,c)三个索引。
    如下都可以使用索引:
    where a = xxx
    where a = xxx and b = yyy
    where b = yyy and c = zzz and a = xxx
    注意a = 1 and b > 3 and c = 4,c是用不到索引的,因为b字段是一个范围查询,它之后的字段会停止匹配。

    原理:
    联合索引的底层是一颗B+树,只不过联合索引的健值数量不是一个,而是多个。假如创建一个(a,b)的联合索引,那么它的索引树是这样的:
    image.png
    可以看到a的值是有顺序的,1,1,2,2,3,3,而b的值是没有顺序的1,2,1,4,1,2。所以b = 2这种查询条件没有办法利用索引,因为联合索引首先是按a排序的,b是无序的。
    同时我们还可以发现在a值相等的情况下,b值又是按顺序排列的,但是这种顺序是相对的。所以最左匹配原则遇上范围查询就会停止,剩下的字段都无法使用索引。例如a>1and b=2,a字段可以匹配上索引,但b值不可以,因为a的值是一个范围,在这个范围中b是无序的。