欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 文旅 > 文化 > MySQL-索引下推

MySQL-索引下推

2025/2/5 14:23:17 来源:https://blog.csdn.net/Uncommen/article/details/145440087  浏览:    关键词:MySQL-索引下推

MySQL-索引下推

前言

MySQL5.6引入了一项查询优化技术:索引下推(Index Condition Pushdown,简称 ICP)

目前只有MyISAMInnoDB支持了ICP

下面就来简单讲讲到底什么是ICP吧。

MySQL服务层与存储引擎层

在MySQL初期设计时,由于当时的局限性,以及为了对MySQL服务层存储引擎层进行职责划分,所以存储引擎层的主要职责是快速借助索引定位数据,然后将数据返回给MySQL服务层,服务层可以更好更快速的对数据进行过滤处理。

所以存储引擎层为了快速地定位数据,只会进行简单的数据过滤。也就是说,如果查询语句的where后通过and连接了多个过滤条件,存储引擎层一般只会执行部分简单的条件。

例如:SELECT * FROM users WHERE age > 30 AND name LIKE 'A%'; 就算有联合索引(age,name) ,存储引擎也只会执行age>30 ,将符合该条件的数据全部返回给MySQL服务层,再由服务层对数据进行name LIKE 'A%' 条件过滤。

ICP

通过前面的讲解,我们知道了,由于初期MySQL设计的局限性,存储引擎层没有充分的用到索引,导致返回了大量多余数据给MySQL服务层,此外存储引擎层在数据查询时也容易产生多余的回表操作。

MySQL完全可以在存储引擎层利用联合索引(age,name) ,执行完被索引覆盖的全部的 age > 30 AND name LIKE 'A%' 过滤条件,就可以返回较少的数据给MySQL服务层。这个技术就是ICP

可以看到,ICP就是将MySQL服务层需要执行的部分复杂条件过滤下推存储引擎层执行,有利于减少存储引擎层与MySQL服务层之间的数据传输开销,也有利于减少回表,提高MySQL查询效率。

补充

ICP在查询条件能够被索引覆盖的情况下才有意义,所以联合索引覆盖索引ICP以及其它优化查询的技术之间往往是相辅相成的。

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com