mysql联合索引一探究竟

假如一个表


CREATE TABLE `test` ( `a1` char(10) DEFAULT NULL, `a2` char(10) DEFAULT NULL, `a3` char(10) DEFAULT NULL, `a4` char(10) DEFAULT NULL, `a5` char(10) DEFAULT NULL, KEY `a` (`a1`,`a2`,`a3`,`a4`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; insert into t VALUES('1','1','1','1','1'),('2','2','2','2','2')

下面那个可以使用到索引那?

  • 1、where a1=x and a2=x and a4>x and a3=x
  • 2、where a1=x and a2=x and a4=x order by a3
  • 3、where a1=? and a5=? order by a2,a3
  • 4、where a1=? and a2=? and a5=? order by a2,a3

示例1:

示例2:

示例3:

示例4:

综上所述问题答案:

1:四个字段均使用了该索引

2:c1,c2字段使用了该索引

3:c1字段使用该索引

4:c1,c2字段使用了该索引

索引的最左原则(左前缀原则),如(a1,a2,a3,a4....aN)的联合索引,where 条件按照索引建立的字段顺序来使用(不代表and条件必须按照顺序来写),如果中间某列没有条件,或使用like会导致后面的列不能使用索引。

索引也能用于分组和排序,分组要先排序,在计算平均值等等。所以在分组和排序中,如果字段顺序可以按照索引的字段顺序,即可利用索引的有序特性。

鲁ICP备16017569号-2