MySQL:关于ICP特性的简析

作者简介:高鹏,笔名八怪。《深入理解MySQL主从原理》图书作者,同时运营个人公众号“MySQL学习”,持续分享遇到的有趣case以及代码解析!

一、ICP简述

ICP:全称为Index Condition Pushdown,是MySQL 5.6引入的一项优化策略。简单的来说就是将本该在MySQL进行过滤的条件下推到Innodb引擎层去做。但是这种策略和我们平时说的使用到了索引实际上是不同的,我们平时说的用到了索引一般指的是使用到了索引进行定位和访问,但是这里却是一种过滤操作。严格意义上来讲和MySQL层的过滤区别并不大,但是由于这里过滤发生在Innodb层,并且还没有进行回表和加行锁操作(for update),因此优点有如下几点:

  • 减少了回表操作
  • 减少了回表后主键加锁(for update),但是对于查询索引而言加锁没有变化。
  • 减少了返回给MySQL层数据的数据

如果在执行计划中出现了Using index condition则说明进行了下推操作,如果想禁用ICP特性则简单设置一下即可,如下:

set optimizer_switch='index_condition_pushdown=off';