当我们创建一个用户表(userinfo),其中有字段:id,name,age,addr。我们将name,age建立联合索引。
当我们执行:select * from userinfo where name like "ming%" and age=20;
对于MySQL5.6之前:我们在索引内部首先通过name进行查找,在联合索引name,age树形查询结果可能存在多个,然后再拿着id值去回表查询,整个过程需要回表多次。
对于MySQL5.6之后:我们是在索引内部就判断age是否等于20,对于不等于20跳过。因此在联合索引name,age索引树只匹配一个记录,此时拿着这个id去主键索引树种回表查询全部数据,整个过程就回一次表。
如下:
当Extra值为:Using index condition.表示使用索引下推。
通过索引下推对于非主键索引进行优化,可有效减少回表次数,从而提高效率。
关闭索引下推命令
set optimizer_switch=‘index_condition_pushdown=off‘;
原文:https://www.cnblogs.com/xujunkai/p/12622758.html