索引下推(ICP)是什么意思?如何理解?

目录

1. 索引下推概述

2. 索引下推举例

3. ICP 的主要作用


1. 索引下推概述

ICP 全称 Index Condition Pushdown,是MySQL5.6之后的一个新特性,它是一种在存储引擎层使用索引过滤数据的一种优化方式。

2. 索引下推举例

下面是数据库的一张 employees 员工表,表中有诸多字段

然后我给 department_id 部门id和 salary 薪水字段添加一个联合索引,departmend_id 排第一位,salary 排第二位

然后利用这个联合索引做一次条件查询。

(1)查询语句如下,

EXPLAIN 
SELECT * 
FROM employees 
WHERE department_id > 50 AND salary > 8000;

可以看到,查询条件中使用到了 department_id 和 salary,所以优化器会选择使用联合索引查询;

(2)首先第一个过滤条件 department_id > 50,可以通过索引快速查询,但是使用到了 ">" ,会导致联合索引后面的索引字段失效,即 salary 再进行判断的时候会进行全表扫描,不能走索引,联合索引只有 department_id 生效;

(3)假如说数据库查询到了 department_id 的数据一共有十条,那么正常来讲这十条数据会全部进行回表查询,查询到十条数据之后再判断第二个过滤条件 salary;

(4)但是数据库优化器会进一步采取索引下推,在这十条数据回表之前,先在引擎层对这十条数据后一个过滤条件 salary > 8000 做判断,这样一来就有可能会再次过滤一些不满足条件的记录,我们假设过滤之后剩下五条记录,那么就只需要进行5次回表查询,将回表查询次数减少,提高了数据库查询效率

使用 explain 执行计划输出查询详细信息

得出如下结果,可以发现再 Extra 额外信息行显示 Using index condition,Using where 

Using index condition 就表示用到了索引下推,索引下推通常应用于联合索引中;

3. ICP 的主要作用

对于InnoDB存储引擎来说,索引下推主要是减少回表查询的次数,降低数据库的IO消耗;因为回表查询是一种随机IO的行为,在回表之前减少回表次数就可以降低数据库的随机IO资源消耗;

ICP不仅可以应用于InnoDB存储引擎,也可以应用于MyISAM存储引擎;        

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值