| 类别 | using index |
|---|---|
| 含义 | 索引覆盖 |
| 效率 | 非常高 |
| 特点 | 通过二级索引实现索引覆盖(无需回表,可以直接在索引树的叶子节点上拿到数据) |
| 类别 | using where;using index |
|---|---|
| 含义 | 索引覆盖 |
| 效率 | 非常高 |
| 特点 | 通过二级索引实现索引覆盖(无需回表,可以直接在索引树的叶子节点上拿到数据),索引条件中存在in、>、>=、<、<=等等,索引类型为range类型 |
| 类别 | using index condition |
|---|---|
| 含义 | 索引条件下推(index condition pushdown) |
| 效率 | 较高 |
| 特点 | MySQL在5.6版本引入了索引下推。根据左前缀原则,前部分索引匹配,where中有在索引列上的条件没有用到,会继续使用未使用索引列条件在当前的索引上继续推导计算。目的是为了过滤更多的行,以减少回表次数。 |
索引条件下推开关
show global variables like 'optimizer_switch';
#检查是否出现index_condition_pushdown=on
官方案例
#索引
INDEX (zipcode, lastname, firstname)
SELECT * FROM people
WHERE zipcode='95054'
AND lastname LIKE '%etrunia%'
AND address LIKE '%Main Street%';
分析:联合索引当前只有zipcode生效,lastname与address使用了完全模糊查询所以失效。
在没有索引下推机制时,通过二级索引zipcode拿到主键后立即回表查询,并携带lastname与address两条件进行再次过滤。
在有索引下推机制后,首先通过zipcode确定二级索引索引,在当前的索引上通过lastname与address条件尽可能做出更多的过滤。缩小了获取主键的范围,意味着减少回表查询的次数开销。
















