Index Merge Intersection会在利用到的多个索引上同时举行扫描,并取这些扫描结果的交集作为最终结果集。
以“SELECT * FROM T WHERE a=1 AND b='C'; ”语句为例:
• 未利用索引合并时,MySQL利用索引idx_a获取到满足条件a=1的全部主键id,根据主键id举行回表查询到相干记录,随后再利用条件b='C'对这些记录举行判断,获取最终查询结果。
mysql> explain SELECT /*+ NO_INDEX_MERGE(T idx_a,idx_b) */ * FROM T WHERE a=1 AND b='C';
图1 SELECT * FROM T WHERE a=1 AND b='C';执行流程
2. Index Merge Union
Index Merge Union会在利用到的多个索引上同时举行扫描,并取这些扫描结果的并集作为最终结果集。
以“SELECT * FROM T WHERE a=1 OR b='B'; ”语句为例:
• 未利用索引合并时,MySQL通过全表扫描获取全部记录信息,随后再利用条件a=1和b='B'对这些记录举行判断,获取最终查询结果。
mysql> EXPLAIN SELECT /*+ NO_INDEX_MERGE(T idx_a,idx_b) */ * FROM T WHERE a=1 OR b='B';