索引覆盖与索引下推个人浅显的理解

一篇文章讲清楚MySQL的聚簇/联合/覆盖索引、回表、索引下推 面试官: 看你简历上用过MySQL,问你几个简单的问题吧。什么是聚簇索引和非聚簇索引?我: 举个例子:有这么一张用户表 用户表中存储了这些数据:那么在索引中,这些数据是怎么存储的呢?MySQL的InnoDB引擎中索引使用的B+树结构。别问为什么根节点存储了(1,4)两个元素,左子节点又存储了(1,2,3)三个元素,下面带有三个叶子节点,叶子节点之间又用有序链表相连?问就是B+树的特性,不了解的可以翻一下上期的文章。如上图所示,叶子节点中存储了全部元素的索引,就是聚簇索引。 一般主键索引就是聚簇索引,如果表中 阅读详情

索引覆盖与索引下推

在日常开发中经常使用sql但是很少意识到这个名词,其实做了一些时间的Coder都会注意这些习惯之后也就认为理所当然,但是对于这些名词总是关注不够造成面试碰壁,今儿就被问到了这两个技术名词弄的我一脸懵逼,说出去10多年开发真是白干了,捂脸!

索引覆盖

这里说的覆盖是通过索引来覆盖原始数据,也就是要查询的列被索引包含,那么Mysql在执行查询的时候会直接将索引中的数据通过存储引擎返回给server,不需要再进行回表获取其他列的数据,举个例子:

select id,user_name from user_info where user_name='hanmeimei';

user_info表对user_name添加了索引,那么在数据库存储引擎中就会维护着一颗根据user_name的B+Tree,根节点中储存着这条数据对应的id跟key值(user_name),由于查询结果只需要这两个字段因此存储引擎直接返回结果,不进行任何其他操作例如比较、回表等等。

如果我们把sql修改下

select id,user_name,age from user_info where user_name='hanmeimei';

当查询列多出了age字段时,索引中的数据显然无法满足查询结果,因此存储引擎根据user_name索引获取到根节点数据后,会根据根节点中存储的id到聚簇索引中获取整条数据信息,然后再返回给请求方。

索引下推

这个概念其实说出来都觉得可笑,觉得不应该如此么,但是mysql低版本就是挺可笑。
在mysql5.6之前是没有这个概念的,我们用一个sql来举例

select id,user_name,age from user_info where user_name='hanmeimei' and age>20;

我们在user_name,age都创建了索引,那么一般想法都是存储引擎会先找到user_name=‘hanmeimei’,然后找到age=20再进行范围索引,可是在mysql5.6之前他还真不是这么干的,他会先找到user_name='hanmeimei’的第一条记录,然后根据根节点中的id回表查询出完整数据然后交给server进行判断如果age<=20那么就丢弃,然后根节点是双向链表他就继续找下一条,然后再去回表如此往复,直到下一条user_name!='hanmeimei’结束。这个效率可想而知。
mysql5.6开始有了索引下推,他做的事儿其实就是咱们想象中他该干的事儿,存储引擎找到user_name后直接判断age,不进行回表也不用去server去判断,直到把所有结果都拿到后返回。

以后开发中还是需要特别注意些自己认为理所当然的事儿,其实这些事儿多看看可以更深入的帮我们理解他周边关联的一些问题,也可以更好的面对面试(重点)。

Mysql【索引覆盖、索引下推、索引合并、索引跳跃】介绍 上图来自MySQL官方文档。MySQL服务层:包括NoSQL和SQL接口、查询解析器、优化器、缓存和Buffer等组件。存储引擎层:各种插件式的表格存储引擎,实现事务、索引等各种存储引擎相关的特性。文件系统层: 读写物理文件。MySQL服务层负责SQL语法解析、触发器、视图、内置函数、binlog、生成执行计划等,并调用存储引擎层去执行数据的存储和检索。我们后续说到的“索引下推”,它的“下”其实就是指将部分上层(服务层)负责的事情,交给了下层(存储引擎)去处理。 阅读详情

相关推荐

STM32异常与中断过程详解

1. 异常与中断概念引入 异常主要是指来自CPU内部的意外事件,比如执行了未定义指令、算术溢出、除零运算等发生在CPU内部的意外事件,这些异常的发生,会引起CPU运行相应的异常处理程序;中断一般来自硬件(如片上外设、外部I/O输入等)发生的事件,当这些硬件产生中断信号时,CPU会暂停当前运行的程序,转而去处理相关硬件的中断服务程序。但无论是异常还是中断,都会引起程序执行偏离正常的流程,转而去执行异常/中断的处理函数。 下面对异常和中断的介绍,如果中断信号的产生原因来自CPU内部,则称之为异常;如果中断信号来

luobeihai的博客 1万+

联合索引技巧

1、覆盖索引:如果查询条件使用的是普通索引(或是联合索引的最左原则字段),查询结果是联合索引的字段或是主键,不用回表操作,直接返回结果,减少IO磁盘读写读取正行数据 2、最左前缀:联合索引的最左 N 个字段,也可以是字符串索引的最左 M 个字符 3、联合索引:根据创建联合索引的顺序,以最左原则进行where检索,比如(age,name)以age=1 或 age= 1 and name=‘张三’可以...

hou_xudong的博客 741

OSNet代码解析(普通卷积,分组卷积,深度可分离卷积,OSblock组成)

文章目录普通卷积和分组卷积普通卷积和深度可分离卷积用深度可分离卷积(LightConv3x3)代替普通卷积(Conv3x3)减少参数OSBlock (bottleneck)OSNet OSNet之所以轻量(2.2M)在于网络浅,使用深度可分离卷积代替传统卷积,但是很有效 普通卷积和分组卷积 所谓分组卷积,就是右图的input features分成一组一组,如上图groups=3,那么输入的特征分成3组,每组有12/3=4的通道的特征参与输出。然后根据输出通道的维度,得到每组的输入特征要计算两次(6/3=2

Mr_DaYang的博客 9802

【MySQL数据库 | 第二十三篇】什么是索引覆盖和索引下推

在数据库查询优化领域,索引一直被视为关键的工具,用于提高查询性能并加速数据检索过程。然而,随着数据库技术的不断发展,出现了一些新的优化技术,其中包括索引下推(Index Pushdown)和索引覆盖(Index Covering)。这两种技术在提高查询性能和降低系统负载方面发挥了重要作用,并且已经成为了现代数据库系统中不可或缺的一部分。

fckbb的博客 7599

智能车竞赛蚂蚁搬家组:NXP-MicroPython与STC单片机协同搬运策略解析

本文深入解析智能车竞赛蚂蚁搬家组中NXP-MicroPython与STC单片机的协同搬运策略。通过硬件选型、通信架构设计、效率优化及实战经验分享,展示了如何利用NXP-MicroPython的实时控制与STC单片机的感知导航优势,实现高效多智能体协同作业,为参赛团队提供实用技术参考。

motor的博客 1080

雪球股票数据接口

周期(day-日,week-周,…表示获取前8个周期(日)数据):类型(before-历史)表示深圳证券交易所,表示上海证券交易所):开始时间戳(一定要。

qq_31856061的博客 6807

详解MySQL覆盖索引、索引下推

一文聊明白mysql的覆盖索引、索引下推

BugMan的博客 6410

Unreal5从入门到精通之初学者碰到解决不了的问题怎么办?

在学习Unreal的过程中,你曾陷入困境了吗?对于我来说,这种情况发生得比我愿意承认的要多得多。幸运的是,除了一般地在网上搜索之外,还有很多地方可以获得虚幻引擎的帮助。

TxNet 979

对mysq索引的浅显理解

索引 为了加快查询速度我们在创建表的时候通常会添加索引,了解索引的结构,以及索引是怎么加快查询速度的,对我们准确使用索引以及面试都是有很大的帮助的。我们知道mysql的两个存储主流引擎innodb、myisam都是使用b+数存储索引的,那么我们不禁会有下面的疑问? 为什么不使用hash表? 我们知道数和hash都能提高查询的速度,为什么innodb、myisam选择了hash表,从hash表本身来说,hash表需要由一个优秀的hash算法才能使数据均匀的分布到hash表中,然而在实际的操作中,这种情况是很难

wanghao的博客 205

零基础快速学习 ABAP 读者意见反馈和下一步写作计划表

大家在学习教程过程中,如果有任何关于 SAP ABAP 开发方面想了解的内容,可以直接在教程各篇文章下评论留言,我会将大家的意见统一汇总到下面的表格,作为我更新教程的内容参考来源之一。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 4273

汽车标定技术(七)--英飞凌TC3xx_Overlay实现页切换

今天说要开个专栏讲讲XCP标定,但在将标定之前,先把英飞凌专门为标定功能设计overlay功能讲解清楚。

认真搞搞汽车MCU 4017

【高频】什么是索引的下推和覆盖

在MySQL的查询优化过程中,覆盖索引是一种常见的优化技术。覆盖索引指的是一个查询可以仅通过索引就能够返回所需的所有列,而无需再次到表中查找。【当sql语句的所求查询字段(select列)和查询条件字段(where子句)全都包含在一个索引中(联合索引),可以直接使用索引查询而不需要回表。传统的索引通常只包含关键字和指向实际数据的指针,因此在查找时需要再次到表中进行查找,以获取其他列的数据。而覆盖索引则将覆盖列也包含进了索引中,可以直接从索引中返回所有需要的列,从而避免二次查找的开销,提高了查询效率。

m0_60469045的博客 2589

任务混部最少服务器数量计算问题

这里的并行度指的是该任务运行时会占用的服务器数量。要注意的是,一个服务器在每个时刻可以被任意任务使用,但同一时刻最多只能被一个任务占用,并且任务运行结束后会立即释放服务器(结束时刻不占用)。最后,我们从字典中找出服务器数量的最大值,这个最大值就是完成这批任务混部最少需要的服务器数量。对于每个任务,我们会遍历其对应的时间区间,将该任务的并行度累加到对应时刻的服务器数量上。任务混部的目标是让这批任务由同一批服务器承载运行,你需要计算完成这批任务混部最少需要多少服务器,以此来最大化控制资源成本。

m0_62153576的博客 108

索引覆盖和索引下推

索引覆盖和索引下推 -从根上理解

weixin_50601779的博客 1129

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

索引下推、索引回表、索引覆盖

简称ICP,是一种优化数据库查询的技术,它利用了数据库索引的特性,在一定条件下,在索引层面就过滤掉不需要的数据,从而减少查询时需要访问的数据块,提高查询效率。在普通的查询中,数据库需要先从表中读取所有的数据记录,然后再根据查询条件过滤不需要的记录,最后返回查询结果。而在索引下推中,数据库会在索引树的节点上进行条件过滤,只将满足条件的数据块返回,而不是读取整个数据记录。这样可以避免从磁盘读取不必要的数据,降低IO开销,提升查询速度。

weixin_57318088的博客 1285

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

什么是索引下推和索引覆盖?

核心思想:在存储引擎层(如 InnoDB)提前过滤数据,减少不必要的回表操作。通俗解释:假设你有一个联合索引,查询时部分条件可以直接在索引层过滤掉不符合条件的记录,而不是把数据全部交给 MySQL 服务层再过滤。核心思想:查询所需的所有列都包含在索引中,无需回表查询主键索引。通俗解释:就像查字典时,你要查的单词和解释都在目录里,不需要翻到正文页。比喻:快递分拣员在仓库里直接扔掉不符合条件的包裹(如收件地址错误),而不是把所有包裹送到分拣中心再处理。核心。

lonelykkk的博客 1520

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

什么是索引覆盖?什么是索引下推?

索引覆盖,索引下推,联合索引,提高查询效率

Chad_it的博客 2147

MySQL的索引覆盖和索引下推

MySQL的索引覆盖和索引下推

醉逸鎏年的博客 6093

什么是索引覆盖与索引下推?

MySQL索引优化技术:索引覆盖与索引下推对比分析 索引覆盖和索引下推是MySQL两大核心优化技术,通过不同方式提升查询性能。索引覆盖通过直接从索引获取数据避免回表,适用于SELECT字段全在索引中的场景;索引下推则允许存储引擎提前过滤非前缀列条件,减少回表数据量。两者可协同使用,如联合索引查询中同时应用ICP和覆盖索引,实现性能倍增。测试显示,在百万级数据中,单独使用索引覆盖或ICP可降低50%-70%查询时间,二者结合可减少90%以上执行时间。优化要点包括合理设计联合索引字段顺序、避免SELECT *、

学习Java技术栈 1429

MySQL-索引

在下面这个表T中,如果我执行 select * from T where k between 3 and 5,需要执行几次树的搜索操作,会扫描多少行? 下面是这个表的初始化语句。 mysql> create table T ( ID int primary key, k int NOT NULL DEFAULT 0, s varchar(16) NOT NULL DEFAULT '', index k(k)) engine=InnoDB; insert into T values(100,1, '

weixin_40805079的博客 298

MySql 优化——覆盖索引、索引条件下推、其他查询优化策略

覆盖索引、索引条件下推 ,EXIST和IN count()的优化,LIMIT1 ,commit

Alex_cf的博客 1392

讲一讲索引下推

索引下推

kyhoon 3610

什么是MySQL的索引覆盖和索引下推?

什么是MySQL的索引覆盖和索引下推?

weixin_47762494的博客 4976

关于你想知道的索引下推、回表、索引覆盖。

在数据库查询优化中,索引下推(Index Condition Pushdown, ICP)、回表(Back to Table)和索引覆盖(Covering Index)是三个关键机制。

Francoder_的博客 1904

MySQL覆盖索引和索引下推,你分得清吗?

概念本质一句话回表二级索引查到主键后,去聚簇索引取数据一次二级索引查询 = 一次随机 I/O覆盖索引查询列全在索引里,直接返回不用回表索引下推在二级索引层面先用条件过滤跳过无效回表覆盖索引和索引下推,都是在"减少回表"这件事上做文章。一个是根本不需要回(覆盖索引),一个是能少回就少回(索引下推)。理解了这一点,你不仅知道它们是什么,还知道它们为什么存在。。

BCSJ666000的博客 362

elasticsearch 修改mapping映射字段

1. 创建一个中间索引 #创建索引 PUT demo_metric_1/ 查看原有字段动态映射类型 GET http://localhost:9002/index[索引名]/_mapping 创建Mapping POST demo_metric_1/type/_mapping { “type”: { “properties”: { “log_time_date”: { “type”: “date”, “format”: “epoch_millis” }, … } } } 2. 向中间索引备份源索引的数据 重

qq_41575913的博客 1101
上一篇: Idea类加载错误问题
下一篇: mac IDEA重新安装报错,闪退,无法PJ
人生重构
博客等级 码龄18年 105粉丝 20原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值