1. 索引合并
MySQL 一般情况下执行一个查询时最多只会用到单个二级索引,但存在有特殊情况,在这些特殊情况下也可能在一个查询中使用到多个二级索引,MySQL 中这种使用到多个索引来完成一次查询的执行方法称之为:索引合并/index merge。
1.1 Intersection 合并
等值匹配
SELECT * FROM order_exp WHERE order_no = ‘a’ AND expire_time = ‘b’; MySQL 使用 order_no 索引查出满足的数据,使用 expire_time 索引查出满足的数据,两者做交集,取出主键,回表查询。
主键列是范围匹配时
SELECT * FROM order_exp WHERE order_no = ‘a’ AND insert_time = ‘a’;
1.2 Union 合并
select * from order_exp where order_no = ‘a’ or expire_time = ‘b’;
1.3 Sort-Union 合并
SELECT * FROM order_exp WHERE order_no< ‘a’ OR expire_time> ‘z’
2. 连接查询
SELECT * FROM e1, e2 WHERE e1.m1 > 1 AND e1.m1 = e2.m2 AND e2.n2 < ‘d’;
有 3 次全表扫描。