什么是联合索引,组合索引,复合索引

1,278 阅读1分钟

这仨其实是一个东西,面试的时候可能问的名字不一样,大家要知道都是一个东西。

我们创建索引的时候可以指定某一列,那么就会按照这一列的顺序生成一个B+树,如果是数字的话,就很好比大小了。如果是字符串那么就会将其转化成ASCll码进行比大小进行排序。这就是普通的非聚簇索引。

那么如果是联合索引,那么会怎么生成B+树呢,首先联合索引,你将会指定多个字段。首先会以第一个字段排序,如果第一个字段相同,那么才会对第二个字段进行排序。如果还有其他字段,以此类推。 我们来看下图。

首先就是按照数字,然后相同的情况按照后面的字符来排序。 这里我们涉及到两个概念。一个是全职匹配,一个是最左前缀匹配。

全职匹配就是查询条件和索引字段都一样。例如 select * from table where c1 = ? and c2 = ? 这种就是全职匹配

最左前缀就是根据索引字段的顺序,要从左边开始。 select * from table where c1 = ? 这一种就是可以走索引的。但如果变成 select * from table where c2 = ?就不满足最左前缀匹配,就不会走索引了。

所以联合索引创建索引是,字段的顺序不一样,使用效果也是不一样的。