首页/数据/SQL 速查/索引合并 index_merge
性能与执行计划72 条

索引合并 index_merge

OR 或多条件组合命中多个单列索引时,优化器可分别扫描再合并结果(Extra: Using intersect/union);它常提示单列索引需要组合成复合索引。

SQL 速查数据更新于 2026-10-12

示例

示例
EXPLAIN SELECT * FROM orders
WHERE user_id = 100 OR status = 'paid';
-- 可能输出:Using union(idx_user, idx_status); Using where

-- 用提示验证单索引方案(对比不同选择下的计划)
EXPLAIN SELECT * FROM orders
WHERE user_id = 100 OR status = 'paid' IGNORE INDEX (idx_status);
intersect多个条件各自走索引后取交集(AND 组合)
union多个条件结果并集(OR 组合)
成本特点合并需要排序去重;更贴合查询的复合索引通常更稳

易错点

  • 看到 Using union(...) 就认为优化到位:合并有额外排序成本,可对比复合索引或 UNION 改写方案
  • 针对 OR 条件只加多个单列索引:复合索引或改写往往更可控

数据来源与参考

  • MySQL 8.0 Reference Manual §8.2.1.3 Index Merge Optimization
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌