最左前缀原则就是最左优先,

在创建多列索引时,要根据业务需求,

where子句中使用最频繁的一列放在最左边。

mysql会一直向右匹配直到遇到范围查询(>、<、between、like)就停止匹配,

比如a = 1 and b = 2 and c > 3 and d = 4

如果建立(a,b,c,d)顺序的索引,d是用不到索引的,

如果建立(a,b,d,c)的索引则都可以用到,

a,b,d的顺序可以任意调整。

=和in可以乱序,

比如a = 1 and b = 2 and c = 3 建立(a,b,c)索引可以任意顺序,

mysql的查询优化器会帮你优化成索引可以识别的形式。

最左前缀原则可以是联合索引的的最左N个字段,也可以是字符串索引的最左的M个字符。举个例子,假如现在有一个表的原始数据如下所示:

图片

并根据col3 ,col2的顺序建立联合索引,此时联合索引树结构如图下所示:

图片

叶子结点中首先会根据col3的字符进行排序,若是col3相等,在col3相等的值里面再对col2进行排序,假如我们要查询where col3 like 'Eri%',就可以快速的定位查询到Eric。

若是查询条件为where col3 like ‘%se’,前面的字符不确定,表示任意字符都可以,这样就可以导致全表扫描进行字符的比较,就会使索引失效。