一般只会为单个索引生成扫描区间,对于多个搜索条件,查询优化器会根据不同的搜索条件判断不同的扫描区间的执行成本,最后选择成本更小的扫描区间对应的索引执行查询操作。特殊情况下,Index Merge索引合并为多个索引生成扫描区间。
索引合并条件使用苛刻,从各个索引中扫描到的记录的主键值是有序的
Intersection索引合并
从不同索引中扫描到的记录id值去交集,只为这些id值执行回表操作
explain select * from single_table st where key1 = 'a' and
key3 = 'b'
单独根据搜索条件从某个二级索引中获取的记录数太多,导致回表成本太大的场景
Union索引合并
从不同索引中扫描到的记录id取并集,再为这些id值执行回表操作
explain select * from single_table st where key1 = 'a' or
key3 = 'b'
Sort-Union索引合并
从各个索引中扫描到的记录的主键值进行排序,再按照执行Union索引合并的方式执行查询。单独根据搜索条件从某个二级索引中获取的记录数比较少的场景下使用
explain select * from single_table st where key1 < 'a' or key3 > 'z'