索引条件下推优化(Index Condition Pushdown (ICP) ) 是MySQL5.6添加的,用于优化数据查询。
不使用索引条件下推优化时存储引擎通过索引检索到数据,然后返回给MySQL Server,MySQL Server进行过滤条件的判断。
当使用索引条件下推优化时,如果存在某些被索引的列的判断条件时,MySQL Server将这一部分判断条件下推给存储引擎,然后由存储引擎通过判断索引是否符合MySQL Server传递的条件,只有当索引符合条件时才会将数据检索出来返回给MySQL服务器。
例如一张表,建了一个联合索引(name, age),查询语句: select * from t_user where name like '张%' and age=10; ,由于name 使用了范围查询,根据最左匹配原则:
不使用ICP,引擎层查找到name like '张%' 的数据,再由Server层去过滤age=10这个条件,这样一来,就回表了两次,浪费了联合索引的另外一个字段age 。
但是,使用了索引下推优化,把where的条件放到了引擎层执行,直接根据name like '张%' and age=10 的条件进行过滤,减少了回表的次数。
索引条件下推优化可以减少存储引擎查询基础表的次数,也可以减少MySQL服务器从存储引擎接收数据的次数。