MySQL之ICP、MRR、BKA、BNL

Index Condition Pushdown(ICP) Index Condition Pushdown (ICP)是mysql使用索引从表中检索行数据的一种优化方式。 ICP原理 禁用ICP,存储引擎会通过遍历索引定位基表中的行,然后返回给MySQL Server层,再去为这些数据行进行WHERE后的条件的过滤。 开启ICP,如果部分WHERE条件能使用索引中的字段,MySQL Server 会把这部分下推到存储引擎层,存储引擎通过索引过滤,把满足的行从表中读取出。ICP能减少引擎层访问基表的次数和MySQL Server 访问存储引擎的次数。 ICP的目标是减少从基表中全纪录读取操作的数量,从而降低IO操作 对于InnoDB表,ICP只适用于辅助索引。 ICP标识 当使用ICP优化时,执行计划的Extra列显示 Using index condition 提示 相关参数 optimizer_switch=”index_condition_pushdown=on”; 可以通过 SET optimizer_switch = ‘index_condition_pushdown=off/on’; 来关闭或开启ICP 适用场景 #辅助索引INDEX (zipcode, lastname, firstname). SELECT * FROM people WHERE zipcode=’95054′ AND lastname … Continue reading MySQL之ICP、MRR、BKA、BNL