索引条件下推(ICP,Index Condition Pushdown),ICP是Mysql针对索引从表中检索时的一种优化特性,在没有ICP的特性如下:
1,根据索引读取一条索引记录,然后使用索引的叶子节点中的主键值回表读取整个表行。
2,判断这行记录十一否符合where条件
有ICP处理后,
1,根据索引读取一条索引记录,但并不回表取出整行数据
2,判断记录是否满足where条件的一部分,并且只能使用索引字段进行检查。如果不满足条件则继续获取下一条索引记录。
3,如果满足条件则返回整行回表信息。
4,再判断where的剩余部分,选择满足条件的记录
ICP的意思就是在筛选字段在索引中的where条件从服务器层下推到存储引擎层,这样可以在存储引擎层过滤数据。由此可见ICP可以减少存储引擎访问基表的次数和服务器访问存储引擎的次数。
ICP的限制使用如下:
1,只能用于InnoDB和MyISAM
2,适用于range,ref,eq_ref和ref_or_null访问方式
3,适用于二级索引
4,不适用于虚拟字段的二级索引