ICP MySQL Index Condition Pushdown的使用限制有哪些

边肖想和大家分享一下使用MySQL索引条件下推(ICP)的限制 。希望你看完这篇文章后有所收获 。让我们一起讨论一下 。ICP(index condition pushdown)是mysql使用索引(辅助索引)元组和索引中筛选字段的where条件从表中提取数据记录的优化操作 。ICP的思想是 , 在访问索引时 , 存储引擎检查索引中过滤字段的where条件(推送索引条件) , 如果索引元组中的数据不满足推送索引条件 , 则过滤掉数据记录 。ICP (Optimizer)尽可能将索引条件的处理从服务器层下推到存储引擎层 。存储引擎使用索引过滤无关数据 , 只将符合索引条件的数据返回给服务器层 。也就是说 , 数据过滤尽量在存储引擎层进行 , 而不是将所有数据返回到服务器层 , 然后根据where条件进行过滤 。索引下推(ICP)是MySQL版本中的新功能 , 是存储引擎层通过索引过滤数据的优化方式 。答:当ICP关闭时 , 索引只是数据访问的一种访问方式 , 存储引擎通过索引回表得到的数据会传递到MySQL Server层进行where条件过滤 。b .当ICP开启时 , 如果某些where条件可以使用索引中的字段 , MySQL server会将这部分下推到引擎层 , 通过索引过滤的where条件可以用于存储引擎层的数据过滤 , 而不是将所有通过索引访问的结果传输到MySQL Server层进行where过滤 。优化效果:ICP可以减少引擎层访问基表和MySQL Server访问存储引擎的次数 , 减少io数量 , 提高查询语句性能 。当ICP开启时 , MySQL会使用索引过滤存储引擎层的数据 , 以减少不必要的返回表 。请注意 , 在虚线中使用where意味着如果where条件包含未被索引的字段 , 它仍然需要由MySQL Server层进行筛选 。ICP :的使用限制 。1当sql需要全表访问时 , ICP的优化策略可以用于range、ref、eq_ref、ref_or_null类型的数据访问方法 。2支持InnoDB和MyISAM表 。3 ICP只能用于二级指标 , 不能用于一级指标 。4并非所有条件都可以通过电感耦合等离子体进行筛选 。如果where条件的字段不在索引列中 , 则应将整个表的记录读取到服务器进行where筛选 。ICP的加速效果取决于存储引擎中ICP过滤掉的数据比例 。6.6版不支持子表的ICP功能 , 5.7版支持 。7当sql使用覆盖索引时 , 不支持ICP优化方法 。看完这篇文章 , 相信大家对“MySQL索引条件下推(ICP)的使用有哪些限制”有一定的了解 。想了解更多 , 请关注行业信息渠道 。感谢您的阅读!

    推荐阅读