
全文约2109字,阅读约13分钟
通常情况下,MySQL在查询一张表时只会用到单个二级索引。但是MySQL有种叫做index merge的优化:在满足一定条件时,查询一张表可以使用多个二级索引。
MySQL将index merge optimzation分为3种:index merge intersection, index merge union, index merge sort union。本篇我们将逐个介绍3种优化的原理,使用条件等内容。
Index merge Interscetion
如下图所示:

02

Index merge union
如下图所示:

MySQL按照sql中不同的过滤条件同时读取不同的二级索引,再对各个二级索引确定的主键列取并集,然后根据并集中的主键范围到聚合索引读取完整的表的行数据。

Sort-union
使用union的条件太苛刻,必须保证各个二级索引在进行等值匹配的条件下才可以用。其实多个二级索引进行范围过滤时也可用。步骤稍微有点不同。

从上图可以看到,不同的二级索引在对主键做并集后,又根据主键排序。然后再去聚合索引查找相关记录行。
03

总结
同时,如果在同一张表上创建多个索引,表的insert,update等操作需要维护的索引比较多,因此有会降低DML语句的执行效率。
和联合索引相比,index merge optimization因为要扫描多个索引,并将多个索引的主键进行排序,取交集,取并集等操作,所以通常会比聚合索引慢。

文章转载自东方国信大数据,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




