分析Mysql索引下推是什么?是否有助优化?

文 / @WordPress主题

Mysql索引下推是什么?是否有助于优化?这是一个值得讨论的问题。索引下推(index condition pushdown)是在Mysql5.6版本中推出的一项优化,主要用于优化查询。在使用非主键索引(也称为普通索引或二级索引)进行查询时,存储引擎先通过索引检索数据,然后再将数据返回给MySQL服务器,之后服务器会再次检查数据是否符合条件。而在使用索引下推时,MySQL服务器将部分判断条件传递给存储引擎,存储引擎会根据条件进行筛选,并只将符合条件的数据返回给MySQL服务器,这样就减少了MySQL服务器获取数据的次数,也减少了存储引擎查询基础表的次数。

当然,索引下推只是在特定情况下才会带来优化效果。首先,需要使用联合索引(或称最左前缀索引)进行查询,而且要符合最佳左前缀原则。接着,如果存在多个条件,只有部分条件能够匹配索引时才会起到优化作用。在这种情况下,MySQL服务器只会传递能够匹配索引的条件,存储引擎会在索引中查找符合条件的数据,这样就避免了在基础表中检查数据的过程。

例如,假设有一个用户表(user),其中主要几个字段有:id、name、age、address。建立了联合索引(name,age)。如果需要查询姓名第一个为陈的所有用户,可以使用以下SQL语句:SELECT * from user where name like '陈%'

如果再加上年龄为20岁的条件:SELECT * from user where name like '陈%' and age=20

在Mysql5.6之前的版本中,执行这个查询会忽略age这个字段,直接通过name进行查询,在(name,age)这棵索引树上查找到了两个结果,然后拿着取到的id值一次次的回表查询,因此这个过程需要回表两次。而在Mysql5.6及之后版本中,InnoDB没有忽略age这个字段,而是在索引内部就判断了age是否等于20,对于不等于20的记录直接跳过,因此在(name,age)这棵索引树中只匹配到了一个记录,此时拿着这个id去主键索引树中回表查询全部数据,这个过程只需要回表一次。实践表明,在非主键索引上的优化,可以有效减少回表的次数,大大提升了查询的效率。

总之,Mysql索引下推是一项非常有用的查询优化技术,可以显著提高查询效率。当然,实际应用时也需要根据具体情况进行权衡和实验,才能选择最优的查询方式。

添加UTHEME为好友
扫码添加UTHEME微信为好友
· 分享WordPress相关技术文章,主题上新与优惠动态早知道。
· 微信端最大WordPress社群,限时免费入群。