The Index Merge access method(索引合并访问方法)检索满足多个 range
scans的rows并将其结果合并为一个。此访问方法只支持合并对单个表的索引扫描;它不会合并涉及多个表的扫描。合并可能原始rows的并集、交集等。
索引合并访问方法有几种算法,这些算法显示在 EXPLAIN
输出的Extra字段中:
Using intersect(...)
Using union(...)
Using sort_union(...)
索引合并的使用取决于optimizer_switch系统变量的index_merge,index_merge_intersection,index_merge_union和index_merge_sort_union flag的值。请参见第8.9.3节 Section 8.9.3, “Switchable Optimizations”。所有这些标志的默认值都是on。如果想要仅启用某些算法,请将index_merge设置为off,并仅启用想启用的其他算法。 Optimizer hints(优化器提示)也可以应用;请参阅 Optimizer Hints for Index Merge Optimization.。
1、The Index Merge Intersection Access Algorithm
当将WHERE子句转换为与AND组合的不同key上的几个范围条件时,优化器会使用此访问算法,并且每个条件为以下之一:
2、The Index Merge Union Access Algorithm
该算法与上一种算法的规则相似。当将表的WHERE子句转换为与OR组合的不同key上的几个范围条件时,该算法适用,并且每个条件为以下之一:
3、The Index Merge Sort-Union Access Algorithm
当WHERE子句转换为OR组合的几个范围条件并且上一种算法不适用时,此访问算法适用。、
这种算法和上一种算法的区别在于这种算法必须首先为所有行提取行ID并在返回任何行之前对它们进行排序。
4、Optimizer Hints for Index Merge Optimization
除了使用optimizer_switch
系统变量来控制优化器在会话范围内使用索引合并算法之外,MySQL还支持优化器hints,以便基于每个语句设置优化器。请参见第8.9.2节 Section 8.9.2, “Optimizer Hints”。