1. 使用前后的成本差别:

    使用前,存储层多返回了需要被index filter过滤掉的整行记录 。
    使用ICP后,直接就去掉了不满足index filter条件的记录,省去了他们回表和传递到server层的成本。 ICP的 加速效果 取决于在存储引擎内通过 ICP筛选 掉的数据的比例。

    1. 使用ICP减少回表次数,只用到了zipcode索引,但还是会先过滤lastname,再去回表。
    2. index(zipcode,lastname,firstname)
    3. SELECT * FROM people
    4. WHERE zipcode = '001'
    5. AND lastname like '%张%'
    6. AND address like '%北京市%'
    1. ICP的使用条件

    ① 只能用于二级索引(secondary index)
    ② explain显示的执行计划中type值(join 类型)为range、ref、eq_ref或者ref_or_null。
    ③ 并非全部where条件都可以用ICP筛选,如果where条件的字段不在索引列中,还是要读取整表的记录到server端做where过滤。
    ④ ICP可以用于MyISAM和InnnoDB存储引擎
    ⑤ MySQL 5.6版本的不支持分区表的ICP功能,5.7版本的开始支持。
    ⑥ 当SQL使用覆盖索引时,不支持ICP优化方法。