索引下推ICP详解

using index condition

  • ICP只能针对二级索引进行使用。不需要针对主键索引
  • MySQL5.6之前,查询的时候,只会根据Index Key去存储引擎层,确定索引的范围,然后将该范围内的 记录取出来,返回到Sql Server层,SqlServer层,再根据where中其他的过滤条件进行过滤。有也 就是说IndexFilter和TableFilter都是在SqlServer层进行过滤的。
  • Using index condition 会先条件过滤索引,过滤完索引后找到所有符合索引条件的数据行,随后用WHERE 子句中的其他条件去过滤这些数据行;
  • 因为MySQL的架构原因,分成了server层和引擎层,才有所谓的“下推”的说法。所以ICP(Index Condition Pushdown,索引下推)其实就是实现了index filter技术,将原来的在server层进行的 table filter中可以进行index filter的部分,在引擎层面使用index filter进行处理,不再需要回表进行table filter。
  • Index Condition Pushdown(ICP)是MySQL 5.6中新特性,是一种在存储引擎层使用索引过滤数据的一种 优化方式。ICP可以减少存储引擎访问基表的次数以及MySQL服务器访问存储引擎的次数。

where条件分类

要想深入理解 ICP 技术,必须先理解数据库是如何处理 where 中的条件的。 
对 where 中过滤条件的处理,
根据索引使用情况分成了三种:index key, index filter, table filter

1. index key

  • 用于确定SQL查询在索引中的连续范围(起始范围+结束范围)的查询条件,被称之为Index Key。由于一个范围,至少包含一个起始与一个终止,因此Index Key也被拆分为Index First Key和Index LastKey,分别用于定位索引查找的起始,以及索引查询的终止条件。也就是说根据索引来确定扫描的范围。

2. index filter

  • 在使用 index key 确定了起始范围和结束范围之后,在此范围之内,还有一些记录不符合where 条件,如果这些条件可以使用索引进行过滤,那么就是 index filter。也就是说用索引来进行where条件过滤。

3. table filter

  • where 中的条件不能使用索引进行处理的,只能访问table,进行条件过滤了。

    也就是说各种各样的 where 条件,在进行处理时,分成了上面三种情况,一种条件会使用索引确定扫描的范围;一种条件可以在索引中进行过滤;一种必须回表进行过滤;
    如何确定哪些where条件分别是 index key, index filter, table filter?

  • 在 MySQL5.6 之前,并不区分Index Filter与Table Filter,统统将Index First Key与Index
    Last Key范围内的索引记录,回表读取完整记录,然后返回给MySQL Server层进行过滤。

  • 而在MySQL 5.6(包含)之后,Index Filter与Table Filter分离,Index Filter下降到InnoDB的
    索引层面进行过滤,减少了回表与返回MySQL Server层的记录交互开销,提高了SQL的执行效
    率。

  • 所以所谓的 ICP 技术,其实就是 index filter 技术而已。只不过因为MySQL的架构原因,分成了server层和引擎层,才有所谓的“下推”的说法。所以ICP其实就是实现了index filter技术,将原来的在server层进行的table filter中可以进行index filter的部分,在引擎层面使用index filter进行处理,不再需要回表进行table filter。

  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: MySQL 索引下推是一种优化查询的技术,它可以通过对索引进行排序和过滤来减少查询的行数,从而提高查询性能。在索引下推中,MySQL 会将索引中的符合条件的行预先取出来,然后再对这些行进行排序和过滤。这样可以避免对整个表进行排序和过滤,减少查询时间。 MySQL 索引下推的条件有: 1. 使用索引列进行过滤 2. 使用索引列进行排序 3. 只返回索引列 使用索引下推,可以大大提高查询性能,特别是对于大表的查询。 ### 回答2: MySQL索引下推是一种优化查询性能的技术。传统的索引使用方法是首先通过索引找到满足条件的记录,然后再对这些记录进行进一步的过滤。而索引下推则是在进行索引查询时,将过滤条件应用于索引的过程中,减少了需要进一步过滤的记录数量,从而提高了查询的效率。 索引下推的基本原理是,在查询时通过索引找到满足条件的记录,然后再利用索引的属性,对这些记录进行进一步的过滤,将不满足条件的记录排除掉。 索引下推的好处在于减少了磁盘IO和数据传输的开销。由于不满足条件的记录被排除在索引搜索过程中,数据引擎只需要读取和传输满足条件的记录,从而减少了磁盘IO和网络传输的负载,提高了查询的效率和性能。 索引下推需要满足两个条件。首先,查询语句必须包含使用到索引的条件,这样才能利用索引进行查询。其次,索引的选择性必须足够高,以保证查询时会有大量的不满足条件的记录可以被排除。 需要注意的是,索引下推只对联合索引起作用,单列索引是不会触发索引下推的优化的。 总而言之,索引下推是一种提高MySQL查询性能的技术,通过在索引搜索过程中对满足条件的记录进行进一步的过滤,减少了不必要的IO和数据传输开销,从而提高了查询效率和性能。 ### 回答3: MySQL索引下推Index Condition Pushdown,简称ICP)是一种优化技术,专门针对多条件查询进行优化。在传统的查询过程中,MySQL首先根据索引定位到符合WHERE条件的行,然后再判断其他条件是否满足。而索引下推则是将除了WHERE条件之外的其他条件也推到存储引擎层进行判断,减少了不必要的数据传输。 索引下推的过程如下:首先,根据WHERE条件,MySQL通过索引找到第一条满足条件的记录,并将这条记录的索引字段保存起来。然后,继续通过索引向下遍历,将符合条件的索引字段和前一条记录的索引字段进行比较,如果相同,则表示满足所有条件,将该行返回给查询结果;如果不同,则表示不满足所有条件,继续向下遍历。 索引下推的优势在于减少了不必要的IO操作和数据传输,提高了查询性能。尤其在范围查询等复杂查询条件下,索引下推可以避免读取大量无关的数据。同时,索引下推也可以减轻服务器负载,提高查询的并发性能。 值得注意的是,索引下推的效果受到多种因素的影响。首先,索引字段的选择很重要,适合作为索引下推的字段应该是高选择性的字段。其次,查询条件中的逻辑关系也会影响索引下推的效果,AND操作适合索引下推,而OR操作则不能使用索引下推。 总而言之,索引下推MySQL的一项重要优化技术,通过将多条件判断推到存储引擎层进行,减少了IO操作和数据传输,提高了查询性能和并发性能。在实际应用中,需要根据具体情况选择合适的索引字段,并注意查询条件的逻辑关系,以获取最佳的查询效果。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值