MySQL的索引合并
Intersection合并
合并逻辑
SELECT * FROM test WHERE name = 'a' AND rmk = 'b';
- 从第一个索引中获取相关的记录
- 从第二个索引中获取相关的记录
- 筛选俩次结果ID相同的
- 回表查询
触发的必然条件(满足该条件可能触发,但是更大的可能性不触发)
- 等值匹配
- 主键列可以是范围匹配:可以用二级索引排序后,进行回表查询
Union合并
- 等值匹配
- 主键列可以是范围匹配
- 使用Intersection索引合并的搜索条件:合并后继续合并
Sort-Union合并
SELECT * FROM test WHERE name > 'a' AND rmk < 'b';
- 从第一个索引中获取相关的记录,ID排好序
- 从第二个索引中获取相关的记录,ID排好序
- 筛选俩次结果ID相同的
- 回表查询
联合索引替代Intersection索引合并
SELECT * FROM test WHERE name = 'a' AND rmk = 'b';
- 这个sql可以直接创建一个name,rmk的联合索引来优化!