索引下推
Index Condition Pushdown(ICP),是一种在存储引擎层使用索引过滤数据的优化方式
- 如果没有ICP,存储引擎会遍历以定位基表中的行,并将他们返回给mysql服务器,有mysql 服务器评估where 后面的条件是否保留行。
- 启用ICP,如果部分 where条件可以仅使用索引中的列进行筛选,则mysql服务器会把这部分 where条件放到存储引擎筛选。然后,存储引擎通过使用索引条目来筛选数据,并且只有在满足这一条件时才从表中读取行。
– 好处:ICP 可以减少存储引擎必须访问基表的次数和mysql服务器必须访问存储引擎的次数
但是,ICP的加速效果,取决于在存储引擎内通过ICP筛选掉的数据的比例
** ICP 开启 关闭**
默认情况下索引下推是开启的,
show variables like ‘optimizer_switch’;
打开索引下推
set optimizer_switch=''index_condition_pushdown=on";
explain 语句输出结果中 Extra 列内容显示为 Using index condition
关闭索引下推
set optimizer_switch=“index_condition_pushdown=off”;
ICP的使用条件