分享好友 最新动态首页 最新动态分类 切换频道
一文看懂MySQL索引下推(ICP)
2024-12-28 20:28


索引下推(Index Condition Pushdown,简称ICP),是MySQL5.6版本的新特性,它允许数据库存储引擎在存储层直接应用WHERE子句中的过滤条件,而不是先将所有匹配的数据行返回给查询处理层(server层)再进行过滤。
因此它能在使用索引时减少回表查询次数,提高查询效率。

在没有索引下推的情况下,如果一个查询涉及到复合索引,但查询条件只覆盖了索引的一部分字段,那么数据库引擎可能会先通过索引找到符合条件的记录,然后再回到主表(即“回表”)去获取完整的记录。这是因为索引中可能只包含了部分字段的信息,而完整的记录需要从主表中获取。

为了更好地理解回表查询,首先需要了解MySQL中的两种主要索引类型:聚集索引(Clustered Index)和非聚集索引(Non-Clustered Index 或 Secondary Index)。

  • 聚集索引:决定了数据在物理磁盘上的存储顺序。对于InnoDB存储引擎,如果没有显式定义聚集索引,那么主键(Primary Key)就会自动成为聚集索引。如果表没有主键,InnoDB会选择一个唯一的非空索引作为聚集索引。如果没有这样的索引,InnoDB会隐式创建一个内部的、隐藏的聚集索引。
  • 非聚集索引:不改变表中记录的物理顺序,而是创建一个独立于表数据文件的结构。非聚集索引的叶节点中存储的是索引字段值和对应行的主键值或行指针。

聚集索引的叶子节点就是数据节点,也就是说索引和数据行在一起;反之,如果叶子节点没有存储数据行,那么就是非聚集索引

注意:InnoDB和myisam均用到非聚簇索引,但是他们有不同的实现。myisam的非聚簇索引指向对应数据块的指针,而对于innodb的非聚簇索引实现,data指向的是主键值,通过主键值去聚簇索引进行索引操作(回表查询),找到叶子节点,数据在该叶子节点上。

详情可以看这篇文章:聚簇索引(聚集索引)和非聚簇索引

  • 使用覆盖索引:确保索引中包含查询所需的所有列,这样就可以直接从索引中获取所有需要的数据,避免回表查询。
  • 优化查询:尽量减少查询中涉及的列数,特别是避免使用SELECT *,只选择真正需要的列。
  • 合理设计索引:将查询中最常使用的列或选择性高的列放在索引的前面,以提高索引的有效性。
  • 在MySQL5.6以上版本中,当使用复合索引(A B),如A字段模糊查询时,会直接判断B字段的条件是不是满足条件,如果不满足则不会进行回表。(详情在章节3)

当使用非聚集索引进行查询时,如果查询所需要的列数据完全可以在索引中找到,那么MySQL可以直接从索引中获取数据,这种情况下索引被称为覆盖索引(Covering Index)。但是,如果查询需要的某些列数据不在非聚集索引中,MySQL就必须使用索引中存储的主键值或行指针来访问表中的数据行,以获取那些不在索引中的列的数据。这个过程被称为回表查询。

如现在有用户表t_user,表里创建联合索引(name, age)。
现在有一条sql

 
 
 
 
 
 
 
 
  • 存储引擎首先根据索引读取数据并将其加载到内存中。
  • 然后在(Server层)内存中应用WHERE子句中的过滤条件,筛选出符合条件的数据行。
  • 这种方式可能导致大量的数据传输,尤其是当数据量较大时。
  • 在存储层使用WHERE子句中的过滤条件。
  • 只有符合条件的数据才会被加载到内存中进一步处理。
  • 这样可以减少数据传输量,从而提高查询效率。
  • 减少数据传输:只传输符合筛选条件的数据行,减少了网络带宽的消耗。
  • 提高查询速度:减少了不必要的数据加载和处理,尤其是在大数据集上效果显著。
  • 节省资源:减轻了内存和CPU的压力。
  • 只能用于range、 ref、 eq_ref、ref_or_null访问方法
  • 只能用于InnoDB和 MyISAM存储引擎及其分区表
  • 对InnoDB存储引擎来说,索引下推只适用于二级索引(也叫辅助索引);
  • 引用了子查询的条件不能下推
  • 引用了存储函数的条件不能下推,因为存储引擎无法调用存储函数。

最新文章
玩转隐私位置的实用技巧:保护个人隐私的新方法
在数字化时代,保护个人隐私变得越来越重要。我们生活中的各种设备和应用程序都在不断收集我们的位置信息,这可能会导致隐私泄露的风险。通过一些实用的技巧,我们可以更好地控制和保护我们的隐私位置。我将分享一些玩转隐私位置的实用技巧
百度SEO常用优化策略(提升网站排名的5个基本步骤)
百度SEO关键词介绍:在搜索引擎优化(SEO)的领域里,关键词优化是一项非常重要的工作。所谓关键词,是指网站上与用户搜索相关的词语,而关键词优化则是通过调整网站内容和结构,以及其他策略,使网站能够在搜索引擎中获得更高的排名。百度优
淘宝导购标题是什么意思?有什么要求?
对淘宝卖家来说,如果能够做好导购标题,那也可以带来更多的精准流量,进而也可以提高转化,但是也有一些卖家还不知道淘宝导购标题这个功能是什么意思,我这就为各位介绍。为了改善此类问题,提升商家的标题效率,吸引消费者点击。淘宝平台
吵了大半年的动漫,不正的三观背后是爱情的物化,附角色现实指数
今年一月番中话题都最高的无疑就是《人渣的本愿》了。 大家肯定都看过这部动漫了,所以就不再重复剧情了。今天要说的是:这部动漫到底多大程度上反映了现实生活?人物概括:青春期迷失的少女。 花火外表心爱,性情温顺,看起来人畜无害,在
百度地图无广告MIUI定制版
1、【智能语音】-语音技术智能强大,可实现全端唤醒,全局交互-喊小度小度,轻松查路线、搜地点、问天气,沿途搜等- 地图语音定制产品,只需9句话,即可生成个人语音包,并支持地图全场景使用2、【智能规划】-提供包含打车、驾车、公交、步
阿里云回应数据库失火:未对云服务造成任何影响;英伟达回应反垄断调查;Devin开放可用,费用为500美元/月 | 极客头条
「极客头条」—— 技术人员的新闻圈!CSDN 的读者朋友们好,「极客头条」来啦,快来看今天都有哪些值得我们技术人关注的重要新闻吧。整理 | 苏宓出品 | CSDN(ID:CSDNnews)一分钟速览新闻点!
用AI轻松生成超逼真美女写真,你也可以拥有自己的AI女友!
限时免费,点击体验最近超火的AI生图神器,坐拥3000美女的大男主就是你! https://ai.sohu.com/pc/generate/textToImg?_trans_=030001_yljdaimn 在这个科技飞速发展的时代,AI已经深入到我们生活的方方面面。想象一下,能够轻松生成一张超
下城区推广引流外包:快速拓展业务的利器367
在竞争激烈的商业环境中,企业需要不断寻找有效的方法来吸引潜在客户并扩大业务。外包推广引流服务已成为下城区企业实现这一目标的可靠解决方案。以下是一篇全面指南,介绍外包推广引流的优势、策略和最佳实践,帮助您在竞争中脱颖而出。外
显卡性能排名全景图:显卡天梯图最新版2023版揭示显卡性能层级及排名走向
随着计算机科技的快速发展,显卡在各个领域的应用愈发广泛,其作用也从单纯的游戏娱乐扩展到工作站和深度学习等专业领域。随着新款显卡不断问世,哪款显卡最具性能优势也成为了许多用户和业内人士关心的问题。现在,请让我们参照最新版的显
相关文章
推荐文章
发表评论
0评