什么是索引下推
官方索引条件下推:
Index Condition Pushdown,简称ICP。是MySQL5.6对使用索引从表中检索行的
一种优化。ICP可以减少存储引擎必须访问基表的次数以及MySQL服务器必须访问存储引擎的次数。可
用于 InnoDB 和 MyISAM 表,对于InnoDB表ICP仅用于辅助索引。
可以通过参数optimizer_switch控制ICP的开始和关闭。
索引下推和覆盖索引是减少回表的一种手段
- ICP可以有效减少回表查询次数和返回给服务层的记录数,从而
减少了磁盘IO次数和服务层与存储引擎的交互次数。
问题
以InnoDB的辅助索引为例,来讲解ICP的作用:MySQl在使用组合索引在检索数据时是使用最左前缀原
则来定位记录,左侧前缀之后不匹配的后缀,MySQL会怎么处理?
配置
#optimizer_switch优化相关参数开关
mysql> show VARIABLES like ‘optimizer_switch’;
#关闭ICP
SET optimizer_switch = ‘index_condition_pushdown=off’;
#开启ICP
SET optimizer_switch = ‘index_condition_pushdown=on’;
示例
1 | CREATE TABLE `test1` ( |
1 |
|
如果使用了索引下推,Extra 中是Using index condition
注意!!!
如果你的 EXPLAIN 输出显示:
1 | Extra: Using where; Using index |
这说明,虽然联合索引 (id1, id2, id3) 被使用,但优化器可能认为使用 索引覆盖扫描 比触发索引下推更高效。