内容来自《收割Offer》

面试官提问

● 为什么在遇到范围查询、like等搜索条件时会停止索引的最左匹配?

索引底层数据结构是一棵B+树,在构建B+树时只能根据一个值来构建,而联合索引会依据最左字段来构建B+树,创建一个(a,b)的联合索引,它的索引树如图1-91所示

image.png

图1-91 联合索引树

在图1-91中,a值是有序的,即1,1,2,2,3,3;b的值是无序的,即1,2,1,4,1,2;在a值确定的情况下,b又是有序的,比如a=3时b等于1,2,是有序的。因此,可以得出如下结论:

● select … where a=? and b = ?,查询时a,b字段都可以使用索引。

● select … where b = ?,因为联合索引首先是按a排序的,只看b是无序的,所以这种查询无法使用索引。

● select … where a>?and b =?,a字段可以使用索引,但b值不可以,因为a的值是一个范围,在这个范围内b是无序的。