文章目录
1. 简介
MySQL 5.6开始支持ICP(Index Condition Pushdown)
,不支持ICP之前,当进行索引查询时,首先根据索引来查找数据,然后再根据where条件来过滤,扫描了大量不必要的数据,增加了数据库IO操作。
ICP:全称为Index Condition Pushdown,是MySQL 5.6引入的一项优化策略。简单的来说就是将本该在MySQL进行过滤的条件下推到Innodb引擎层去做。但是这种策略和我们平时说的使用到了索引实际上是不同的,我们平时说的用到了索引一般指的是使用到了索引进行定位和访问,但是这里却是一种过滤操作。严格意义上来讲和MySQL层的过滤区别并不大,但是由于这里过滤发生在Innodb层,并且还没有进行回表和加行锁操作(for update),
在某些查询下,可以减少Server层对存储引擎层数据的读取,从而提供数据库的整体性能。因此
优点有如下几点:
-
减少了回表操作,将where的部分过滤操作放在存储引擎层提前过滤掉不必要的数据,减少了不必要数据被扫描带来的IO开
-
减少了回表后主键加锁(for update),但是对于查询索引而言加锁没有变化。
-
减少了返回给MySQL层数据的数据
ICP相关控制参数
index_condition_pushdown
:索引条件下推默认开启,设置为off关闭ICP特性