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的联合索引来优化!
posted @ 2021-12-26 01:21  程序java圈  阅读(115)  评论(0编辑  收藏  举报