索引下推(ICP)~联合索引妙用

索引下推简介

索引下推(index condition pushdown )简称ICP,在Mysql5.6的版本上推出,用于优化查询。在不使用ICP的情况下,在使用非主键索引(又叫普通索引或者二级索引)进行查询时,存储引擎通过索引检索到数据,然后返回给MySQL服务器,服务器然后判断数据是否符合条件 。索引条件下推优化可以减少存储引擎查询基础表的次数,也可以减少MySQL服务器从存储引擎接收数据的次数。

索引下推具体过程

我们有一张表
在这里插入图片描述
我们在这张表的name和age字段建立了一个联合索引,该索引的结构如下:
在这里插入图片描述
如果我们进行以下语句的查询:
在这里插入图片描述
在MySQL5.6之前他没有联合索引的时候MySQL是如何查询的呢

  1. 通过联合索引查询到张猛和张三的主键
  2. 直接回表两次查询到完整的数据
  3. 查找到完整的数据后再判断age满不满足条件
    如果有索引下推(ICP)的话,如果能在二级索引(这里是联合索引)拿到age,直接过滤数据,可以大大减少回表的次数
    注意
    在这里插入图片描述
    我们可以用expalin关键字观察有没有走索引和有没有索引下推
  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
索引(Index Pushdown)是一种数据库查询优化技术,它通过将查询尽可能地转换为索引操作,从而减少了数据的读取和传输量,提高了查询性能。在索引中,查询优化器会尝试将查询条件下索引层级进行处理,以避免全表扫描或者大量数据的传输和读取。 具体来说,索引可以分为以下两种形式: 1. 索引条件下:将查询条件下索引层级进行处理,只读取满足条件的数据,从而减少数据的读取和传输量。例如,对于以下SQL语句: ```sql SELECT * FROM table_name WHERE column_name = 'value'; ``` 如果 `column_name` 列上存在索引,查询优化器可以将查询条件下索引层级进行处理,只读取满足条件的数据,而不是读取整张表的数据。 2. 列投影下:将查询的列下索引层级进行处理,只读取需要的列数据,避免读取不必要的列数据,从而减少数据的传输量。例如,对于以下SQL语句: ```sql SELECT column_name FROM table_name WHERE column_name = 'value'; ``` 如果 `column_name` 列上存在索引,查询优化器可以将查询的列下索引层级进行处理,只读取需要的列数据。这样可以避免读取不必要的列数据,提高查询性能。 需要注意的是,索引并不是所有数据库系统都支持的功能,具体要看数据库系统的实现。在MySQL中,索引被称为“索引优化”(Index Condition Pushdown,ICP),它可以通过开启 `condition_pushdown_for_derived` 和 `condition_pushdown_for_subquery` 两个参数来启用。在Oracle中,索引被称为“表达式下”(Predicate Pushdown),它可以通过开启 `PUSH_PRED` 优化参数来启用。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值