Loading

MySQL 索引合并

Index merge

一定程度上可以使用表上多个单列索引定位指定的行

在MySQL5.0和更新版本中,查询能够同时使用这两个单列索引进行扫描并对结果进行合并

  • OR条件的union
  • AND条件的intersection
  • 前两种情况的union和intersection

索引合并有时候是优化结果,但实际上说明表索引建立得很糟糕

  • 当server对多个index做AND条件,意味着需要一个包含所有相关列的多列索引,而不是多个独立的单列索引
  • 当server对多个index做OR条件,需要耗费大量CPU和内存资源在算法的缓存、排序和合并操作上
  • 特别是有些索引选择性不高,需要合并扫描返回大量数据

优化器不会将这些计算到“查询成本”中

如果在explain中看到有索引合并,需要检查查询和表的结构,查看是否最优

也可以通过参数optimizer_switch来关闭索引合并功能,也可以使用IGNORE INDEX让优化器忽略某些索引

 

 

posted @ 2021-10-25 10:29  BigBender  阅读(255)  评论(0编辑  收藏  举报