联合索引,组合索引,详细应用实例

概念:也称组合索引,在两个字段或两个字段以上建立索引,不像单列索引这么直白,所以这里进行详细分析一下

创建一个(a,b)的联合索引,那么它的索引树就是下图的样子
在这里插入图片描述

(1)从结构图可以看出,第一个字段是有序排序的,其他字段是无序的 这里就可以看出 a的排序 是 1 1 2 2 3 3 是有序 b的排序 1 2 1 4 1 2是没有序的(整体来看)
(2)从结构图可以看出,如果在第一个字段有序 第二个字段有序…基础上,那么往下的一个字段排序是有序的 例如 a=1 那么 (1,1) (1,2) 这几个组合 这几个组合 中 往下的一个字段 b 排序 是 1 2 是有序的 (局部来看)
(3)where 条件: where语句 需要吻合 最左原则 例如 建立 联合索引 (a,b,c) 相当于建立了三个索引 (a) (a,b) (a,b,c)
那么 要想使用这个联合索引 where 语句 应该是
1、where a=’’
2、 where a=’’ and b=’’
3、where a=’’ and b=’’ and c=’’ ( where 字段的编写顺序不会影响解析优化器是否选用 该索引 就是说 【where a=’’ and b=’’ and c=’’ ”】与 【c=’’ and a=’’ and b=’’】一样的解析执行效果 )
where 语句不应该是 where a=’’ and c=’’ 或者 where b=’’ 或者 where c=’’ 或者 where b=’’ and c=’’ 因为这些语句 没有按照 (a)(a,b)(a,b,c)
(4)模糊查询中 like “a%” 是能使用到索引的 因为 a开头 能使用索引进行范围的查找,是一个 range 级别的查找

应用例子
(1) 多个字段 and 考虑使用联合索引
在这里插入图片描述

(2) 解决回表问题

在这里插入图片描述

(3)解决filesort排序问题 以及 group by temporary问题
filesotr问题
在这里插入图片描述

在这里插入图片描述

group by问题
在这里插入图片描述

在这里插入图片描述