如何理解MySQL 索引最左前缀原则

在创建一个n列的索引时,需要遵循“最左前缀”原则。

创建表:create table abc(a varchar(32) not null, b varchar(32), c date, d varchar(32) );

创建普通索引:create index in_abc_acb on abc(a, c, b);

1、select * from abc where  d='d' and b='b';  不会用到索引,必须要用到左边第一个字段;

2、select * from abc where a like '1%' and c=sysdate;  a 会用到索引,c 则不会,遇到范围(>、<、between、like)查询就停止匹配,而 where a = '%1',不会用到索引;

3、select * from abc where trim(a) = 'a' ; 不会用到索引 ,字段前加了函数(表达式)索引会被抑制。where a = 'a' and c + 1 > sysdate,c不会用到索引,而where a = 'a' and c > sysdate - 2,会用到索引;

4、select * from abc where b like 'b%' and c = sysdate and a='a' ;acb的索引都可以用到,因为索引是从左到右匹配,in 和 = 可以乱序;

posted @ 2019-03-02 21:44  吴wuwu  阅读(760)  评论(0编辑  收藏  举报