MySQL 索引合并
Index merge
一定程度上可以使用表上多个单列索引定位指定的行
在MySQL5.0和更新版本中,查询能够同时使用这两个单列索引进行扫描并对结果进行合并
- OR条件的union
- AND条件的intersection
- 前两种情况的union和intersection
索引合并有时候是优化结果,但实际上说明表索引建立得很糟糕
- 当server对多个index做AND条件,意味着需要一个包含所有相关列的多列索引,而不是多个独立的单列索引
- 当server对多个index做OR条件,需要耗费大量CPU和内存资源在算法的缓存、排序和合并操作上
- 特别是有些索引选择性不高,需要合并扫描返回大量数据
优化器不会将这些计算到“查询成本”中
如果在explain中看到有索引合并,需要检查查询和表的结构,查看是否最优
也可以通过参数optimizer_switch来关闭索引合并功能,也可以使用IGNORE INDEX让优化器忽略某些索引
论读书
睁开眼,书在面前 闭上眼,书在心里
睁开眼,书在面前 闭上眼,书在心里