12.索引合并-indexMerge

navyum / 2025-02-15 / 原文

索引合并 index merge:

  • 含义:使用到多个索引来完成一次查询的执行方法
  • explain 中 type 会显示index merge

核心思想:

  • 读多个二级索引的操作是顺序IO(索引是有序的),只用一个索引,但是做回表操作是随机IO
  • 索引合并优点:
    • 可以减少回表次数
    • 基于有序的主键回表 Rowid Ordered Retrieval,简称ROR。

索引合并分类:

Intersection合并(交集):

  • 条件中有多个AND
  • 使用条件:
    • 二级索引列需要是等值匹配的情况;对于联合索引,索引中的每个列都必须等值匹配,不能只匹配部分列
    • 主键列可以是范围匹配(只有在这种情况下根据二级索引查询出的结果集是按照主键值排序的)
    • 最终是否会使用索引合并,还是得看优化器的成本计算结果

Union合并:

  • 条件中多个OR
  • 使用条件:
    • 二级索引列需要是等值匹配的情况;对于联合索引,索引中的每个列都必须等值匹配,不能只匹配部分列
    • 主键列可以是范围匹配
    • 使用Intersection索引合并的搜索条件

Sort-Union合并:

  • 条件中多个OR
  • 不强求所有条件都是等值匹配
  • 具体做法:
    • 先按照多个二级索引记录找到对应的多个主键集合,分别进行主键排序
    • 再按照Union索引合并方式执行