为什么会有索引合并?
在一个查询中使用到了多个二级索引
Intersection合并(交集)
将从多个二级索引中查询到的结果取交集;
select * from table where key1 = 'a' and key3 = 'b';
过程:
- 从idx_key1二级索引对应的B+树中取出key1='a’的相关记录;
- 从idx_key3二级索引对应的B+树中取出key3=‘b’的相关记录;
- 二级索引的记录都是由索引列+主键构成的,所以我们计算出这两个结果集中id值的交集;
- 按照上一步生成的id值列表进行回表操作,也就是从聚簇索引中把指定id值的完整记录取出来,并返回;
union合并
sort-Union合并
先按照二级索引记录的主键值进行排序,之后按照Union索引合并方式执行的方式叫sort-union索引合并;