索引条件下推优化(Index Condition Pushdown (ICP) )是 MySQL5.6 添加的一项索引优化功能,它允许存储引擎在索引遍历过程中,执行部分 WHERE字句的判断条件,直接过滤掉不满足条件的记录,从而减少回表次数,提高查询效率。
- 不使用索引条件下推优化时存储引擎通过索引检索到数据,然后返回给 MySQL Server,MySQL Server 进行过滤条件的判断。比如说在某些索引失效的情形下,例如联合索引,在索引列使用表达式进行范围查询,后边索引字段会失效,不起作用。
- 当使用索引条件下推优化时,如果存在某些被索引的列的判断条件时,MySQL Server 将这一部分判断条件下推给存储引擎,然后由存储引擎通过判断索引是否符合 MySQL Server 传递的条件,只有当索引符合条件时才会将数据检索出来返回给 MySQL 服务器。
索引条件下推优化可以减少存储引擎查询基础表的次数(减少回表次数),也可以减少 MySQL 服务器从存储引擎接收数据的次数(减少存储引擎层和 Server 层的数据传输量)。