加载中...

索引合并(Index Merge)是一种表访问方式:当查询的过滤条件涉及多个列、且各列上分别存在单列索引时,优化器同时扫描多个索引,将得到的行位置集合做交集(AND 条件)或并集(OR 条件),再统一回表取行。
MySQL 提供三种索引合并算法:intersect(交集,各索引结果按主键求交)、union(并集,处理 OR 条件)与 sort-union(范围条件的结果先按主键排序再求并)。执行计划 type 列显示 index_merge,Extra 中注明所用算法。
PostgreSQL 以位图索引扫描(Bitmap Index Scan)实现同类思想:各索引扫描生成位图,经 BitmapAnd/BitmapOr 组合后按物理顺序回表,I/O 更有序,是其处理多条件与 OR 查询的常规手段。
索引合并是缺少合适联合索引时的补救路径,回表与合并本身有开销;若某个多列条件组合高频出现,为其建立联合索引通常明显优于依赖索引合并。MySQL 中偶见优化器错误选择 intersect 导致变慢的案例,可用 Hint 或调整 optimizer_switch 规避。

登录 后参与讨论
暂无讨论,来发表第一条评论吧