分享好友 最新动态首页 最新动态分类 切换频道
一文看懂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存储引擎来说,索引下推只适用于二级索引(也叫辅助索引);
  • 引用了子查询的条件不能下推
  • 引用了存储函数的条件不能下推,因为存储引擎无法调用存储函数。

最新文章
如何让百度快速收录新站文章
对于新手站长来说,如果给一个老站做关键词,只需要我们发一些高质量文章和一些外链就能带来很好的排名,网站前期的优化已经有人帮我们做完了。而自己做新站排名就十分困难,在我们设定好网站三大标签,设定好网站发展方向之后,首先就需要
豆瓣9.1!历时4年拍摄,BBC年度巨献,我们生活的大洲竟如此奇妙
历时四年时间拍摄,BBC的年度巨献——《亚洲》终于在今年冬天和大家见面啦!* 播出平台:爱奇艺、优酷、b站、腾讯、东方卫视* 共6集,有中文/英文两版解说是我们生活的地方,除了地理书上的数据与考点,你对它还有什么了解吗?这部纪录片讲
开蛋糕店需要投资多少钱_开蛋糕店需要投资多少钱不加盟的
开一家蛋糕店需要多少投资,这是一个因人而异的问题,取决于很多因素,如店面大小、装修风格、设备、原材料等,下面我将根据一般情况,为你提供一个大致的投资预算。你需要确定店面的位置和大小,一个小型蛋糕店需要大约20-50平方米的空间
张家口职业技术学院招生专业名单一览表(最新)
专业序号 专业名称专业性质所属院系1会计专业专科 财经旅游学院2旅游管理专业专科 3金融服务与管理专业专科 4电子商务专业专科 5汽车装配与试验技术专业专科 汽车工程系6新能源汽车技术专业专科 7冰雪设施运维与管理专业专科 机电工程学院8
小程序商城首页java后台开发:构建高效电商平台
小程序商城首页java后台开发:构建高效电商平台首页设计原则:用户体验至上小程序商城首页设计的核心原则是将用户体验置于首位。这意味着在设计过程中,需要深入理解用户需求,以用户为中心进行设计。首页布局应简洁明了,方便用户快速找到
wordpress建站教程入门_WordPress 建站教程入门,轻松开启你的网站建设之旅
本文目录导读:准备工作后台管理插件和主题优化和推广维护和更新在当今数字化时代,拥有一个自己的网站已经成为许多人展示个人风采、推广业务或分享兴趣的重要方式,而 WordPress 作为一款功能强大且易于使用的内容管理系统,成为了众多新
用AI工具轻松生成超逼真美女写真!你也能拥有你的AI女友!
在这个充满创意的时代,AI技术的迅猛发展给我们带来了无限的可能。是否想象过,随手一按就能生成一张超逼真的美女写真,甚至有机会成为你专属的“AI女友”?今天,宝子们就带大家深度探索那些能生成惊艳美女照片的AI工具,让你在这个数字世
建材老板如何引流推广?54
了解目标受众找出您的理想客户是谁,包括他们的年龄、性别、收入、兴趣和痛点。了解他们的需求和偏好将有助于您制定针对性的引流策略。打造强大品牌建立一个独特的品牌标识,包括徽标、名称和讯息。专注于与客户建立情感联系,并展示您的价
玩转隐私位置的实用技巧:保护个人隐私的新方法
在数字化时代,保护个人隐私变得越来越重要。我们生活中的各种设备和应用程序都在不断收集我们的位置信息,这可能会导致隐私泄露的风险。通过一些实用的技巧,我们可以更好地控制和保护我们的隐私位置。我将分享一些玩转隐私位置的实用技巧
相关文章
推荐文章
发表评论
0评