索引(条件)下推:(ICP)
例如:
聚合索引 zipcode_lastname_id
EXPLAIN SELECT * FROM people
WHERE zipcode = ‘00001’
AND lastname LIKE ‘%张%’
AND address LIKE ‘%北京%’
上述SQL语句就使用到索引下推,lastname的模糊查询导致索引失效,但是优化器并没有在使用完zipcode字段索引后就进行回表去查询数据,而是直接对lastname进行模糊查询,再过滤掉一部分数据后再进行回表,这种情况就叫索引下推(ICP)
ICP使用条件:
1.ICP可以用于InnoDB和MyISAM表,对于InnoDB表,ICP仅用于二级索引。ICP的目标是减少全行读取次数,从而减少IO操作
2.当SQL使用覆盖索引时,不支持ICP
3.相关子查询不能使用ICP