索引下推简介
索引下推(index condition pushdown )简称ICP,在Mysql5.6的版本上推出,用于优化查询。在不使用ICP的情况下,在使用非主键索引(又叫普通索引或者二级索引)进行查询时,存储引擎通过索引检索到数据,然后返回给MySQL服务器,服务器然后判断数据是否符合条件 。索引条件下推优化可以减少存储引擎查询基础表的次数,也可以减少MySQL服务器从存储引擎接收数据的次数。
索引下推具体过程
我们有一张表
我们在这张表的name和age字段建立了一个联合索引,该索引的结构如下:
如果我们进行以下语句的查询:
在MySQL5.6之前他没有联合索引的时候MySQL是如何查询的呢
- 通过联合索引查询到张猛和张三的主键
- 直接回表两次查询到完整的数据
- 查找到完整的数据后再判断age满不满足条件
如果有索引下推(ICP)的话,如果能在二级索引(这里是联合索引)拿到age,直接过滤数据,可以大大减少回表的次数
注意:
我们可以用expalin关键字观察有没有走索引和有没有索引下推