范文健康探索娱乐情感热点
投稿投诉
热点动态
科技财经
情感日志
励志美文
娱乐时尚
游戏搞笑
探索旅游
历史星座
健康养生
美丽育儿
范文作文
教案论文

这样理解MySQL索引,阿里面试官也给你点赞

  引言
  索引是Mysql的一块硬骨头,但是对于程序猿来说又是十分重要的基础技能。在平常的项目开发中,它是重要的SQL优化手段。在求职面试中,它是面试官常常用来考察求职者数据库性能优化方面的重要考量。
  因此透彻地掌握索引原理,并能够将其运用到数据库查询实战是每个程序猿必备的能力。本文将从索引原理、索引设计原则方面阐述Mysql索引。 相信阅读完本文之后,在Mysql索引查询数据理解这块完全可以征服阿里面试官。准备好了吗?我们发车了。  索引原理
  在进行索引设计以及优化之前,我们先深入理解下索引的原理。 因为所有的设计以及优化一定是建立在你对原理的透彻理解的基础上。
  很多人都知道,在进行SQL查询时,同样一张表、同样的数据。不加索引以及不加索引进行数据查询。两者差别很多。那么到底是为什么会有这种差距。简单来说,如果把业务数据比作为一本字典的话, 那么索引就是这本字典的目录。
  如果我让你查一个字,在你不使用目录查的时候,那只能一页一页地翻,运气不好的话可能要翻到最后一页才能查到想要的字,这就是传说中的全表扫描。但是如果我们通过目录来查找,那么可以很快定位字所在页,进而查找到对应的字。看到了吧,索引的威力就在于提高数据查询的效率。 好了,现在我们对于索引有了新的认识。那么我们接下来就深入了解一下。
  我们都知道在 Mysql  中索引的数据结构是 B+  树(这里不再说明 B  树、 Hash  索引等结构的优劣,不是本文的重点), 那么我们就一步一步来看看,索引在磁盘中的 B+  树是怎么长成的。
  1、数据页
  在日常的项目开发中,我们的业务数据大部分都存在关系型数据中。那么数据库中各个表中的数据最终也都是存储在服务器的硬盘当中的。 不知道大家有没有想过这个数据到底是怎么存储的呢?
  实际上Mysql数据库中我们每天都在使用的数据库表是对于人来理解的逻辑表。 它实际在磁盘当中是通过一页页的数据页进行存储的。
  数据页是磁盘与内存交互的基本单位,Mysql的Innodb存储引擎,实际通过buffer pool与磁盘中的数据页进行交互,而不是直接操作磁盘中的数据页。 数据页的结构如下图所示:
  同时相邻的数据页之间通过双向链表来维护数据页之间的相互引用。如下图所示,橙红色部分即为数据页, 中间的小框框可以理解为一条条具体的数据。
  Mysql的InnoDB存储引擎数据页大小是16KB。Mysql的Innodb存储引擎通过页号来唯一定位一个数据页,因此每个数据页都有自己的页号。
  通过上图可知,每个数据页都有对应的Page Header,在Page Header中保存了当前数据页的页号,以及其下一页的页号和上一页的页号。
  相邻的数据之间通过指针进行互相引用,指针标注数据页的页号,每个数据页中存储了连续的一段数据,每个数据行中的记录头部存有下一行记录真实数据的地址偏移量,简单理解为拥有指针指向下一行数据的地址。
  因此在数据页的内部,实际上是关于数据行的单向链表。这个单向链表是关于主键id的,从小到大进行排列。
  从上述的数据页结构可知,每次进行数据插入时User Records区域就会变大,相应的的User Record区域就会减少。当User Record区域消耗完之后,就会发生页分裂,形成新的数据页。这里需要注意的是,如果我们使用的是Mysql中的自增主键,那么可以保证按照id的增长顺序进行数据行排列,但是如果主键是我们自己设置的并不是自增长的,那么有可能出现后面插入的数据的主键值小于前面数据的主键值,那么在进行页分裂的时候,Mysql会按照主键大小重新进行排列。
  此处不知道大家有没有疑问,为什么一定要按照主键大小进行排列呢?实际上和后续的数据查询有关系,数据页中的数据按照主键顺序进行排列是索引可以正常运行的基础。 大致的过程如下图所示:
  2、页目录
  每个数据页都有自己的页目录上面页结构中的Page Directory,这个页目录的作用实际上就是用来进行数据行定位的。
  数据页中的数据实际上是按组分配的,页目录中的不同的槽位,其实是对应了数据页中的不同的分组,查询数据时,通过id找到对应的槽,再根据对应的槽来知道对应在数据页中的数据行分组, 遍历数据行分组中的数据直到找到对应的数据。
  3、索引原理分析
  (1)索引基础
  有了上面两节的数据页的基础知识之后,我们再来探讨索引原理就更加容易理解了。在没有索引时,数据查询都是进行全表扫描。遍历查询数据页中的每个数据行,再遍历所有的数据页,直到找到符合条件的数据项。因此查询效率十分的低下。
  那么应该怎么才能提供数据查询的效率呢?能不能像字典的目录一样,也搞个主键目录来进行数据页号的定位呢?答案是肯定的,Mysql实际也正是这么做的。Mysql通过主键目录实际就是传说中的主键索引,实现数据的查询优化。
  在主键目录中包含了两个重要元素,一个是数据页中最小的主键,另一个是当前数据页的页号。这样可以通过这个主键目录方面的进行数据查询。
  举个栗子,如果此时想要查询主键id=5的数据,那么首先在主键目录中进行查找。此时发现主键id=5大于主键id=1,但是又小于id=8,那么就可以确定实际上数据实际是在页号为1的数据页中的。
  当然在实际在Mysql中会有很多的数据页,因此对应的主键索引也会很多,那么此时就需要通过二分查找的方式进行数据页定位,再查找到对应的数据。
  (2)索引页
  如今当下,各个互联网公司迅猛发展,对应的业务量也是十分巨大。因此数据库中的数据量也是十分庞大的。表中的数据几百万、上千万可能很常见,按照上述的主键目录,那么就需要存储大量的主键与数据页号。即便是进行二分查找,其数据查询效率也是比较低的。
  Mysql实际是将索引数句存储在索引页中的,当数据量比较大时候,对应的索引也会比较多,因此通过专门的索引页来存储索引数据。另外在这些索引页的上层又通过主键与索引页号来继续进行索引页的查询定位,因此我们得到如下的结构。其中的id号指的是对应最小的id号。
  如果索引页中的数据越来越多,索引页同样会进行页分裂。这样索引页也就形成了不同的层级,索引页层、索引页、数据页这三个页数据就形成了我们说的B+树。下图就是索引的B+树结构,通过它完成数据查询效率远高于全表扫描。
  B+的叶子节点才会存储数据,下图是一种主键索引,也叫聚簇索引。其实我们可以看出来,它的根本思想就是分而治之的思想。数据量很大是吧,那我就把数据分成很多的数据页,数据页很多是吧,那我就通过索引页来组织数据页,索引页很多是吧,那就再通过索引页来索引。
  我们再来看下,数据查询在 B+  树中的查询过程。举个栗子,如当前需要查询id为3的数据,那么将在索引页中判断应该走索引页为3的索引页。那么在索引页为 3  中继续判断 id=1  应该走索引页为1的索引页,在索引页中判断应该页号为 1  的数据页,在此数据页中遍历最终查询到对应的数据。
  以上通过索引页与数据页组成的B+树就是聚簇索引,当然我们也可以通过其他字段来建立普通索引。
  知识普通索引会的叶子节点存储的是对应的主键id,而不是具体的数据,索引会存在回表的问题,即查询到对应的id之后,还需要根据id继续到聚簇索引中查询具体的数据,通过这样的操作才能查询到select *的所有数据。当然我们可以通过覆盖索引的方式避免这样的查询浪费。  总结
  本文通过一步步图解的方式,为大家拆解Mysql的InnoDB的索引原理,同时构建出对应的B+树索引结构。阐述了数据查询的具体过程。 相信大家对于索引这块有了更加深刻的理解,后面会从实战的角度出发,分析下如何设计索引以及如何应对索引失效的问题。
  转载于:https://blog.csdn.net/Diamond_Tao/article/details/117340176

有类似这种壁纸吗?很高兴能回答你的问题,作为主打壁纸的头条号,一直坚持着优质完美的使用体验。力争给大家提供最好的最适合的壁纸,那么现在就由我好好的给你回答问题。你所张贴出来的壁纸属于黑色系壁纸,可能助听器是不是就是一个放大器?在回答问题之前,我们先回忆一下助听器工作原理助听器在工作时,麦克风先将接收到的声信号转换成机械能,然后变为电信号,处理后放大后的电信号再由受话器(喇叭)转化成声信号,最后将声音送入又一家芯片工厂定在美国!台积电做了选择,我们必须放弃幻想芯片的地位越来越高自1958年首块集成电路诞生以来,芯片在各种领域中的应用不断扩展,其地位也越来越重要。但现在芯片短缺正在全球范围内蔓延,极大地影响了多种技术和产品的发展。芯片为何美国索取跨国公司芯片数据,中国不宜袖手旁观本文转自作者黄蓥祺对美国以行政手段要求芯片大厂提供特定数据,中国可以尝试以反垄断等形式要求各大厂商保证中国工业芯片数据信息安全。二战后,美国长期实行的产业外包政策使美国得以专注技术海南大学AI隐私建模提供数据安全解决方案如今人工智能深度学习在各个领域广泛应用,而深度学习的首要任务是数据收集,由此带来数据收集过程中隐私泄露的风险。针对AI治理中技术与法律的结合问题,面向海南自贸港建设数字孪生第一省的印度版支付宝上市,马云和蚂蚁集团成为最大的赢家支付宝是国内最大的移动应用软件之一,截至去年底,支付宝的全球总用户超过12亿,与微信并称两大国民软件。在移动互联网时代,支付宝的诞生极大的方便了国人的消费,无论是电商购物还是线下的保险产品三次更替潮重疾险拼保障和服务短期医疗险不保证续保互联网保险提高门槛21世纪经济报道李致鸿北京报道今年以来,寿险领域已迎三次产品更替潮。日前,银保监会发布关于进一步规范保险机构互联网人身保险业务有关事项的通知,要求新开展互联网人身保险业务须符合各项冬天到了,电动爹出门就像一场大冒险新时代潮男小呆和小聪,燃油车摇号长时间无果,各自喜提了一辆电动汽车。人与车的幸福生活,就此开始了虽然有这么多槽点,但新能源汽车历史进程,已经不可扭转。乘联会数据显示,2021年9月拼多多的免费提现800是真的吗?这个问题我想我是最有资格回答你了啊捂脸捂脸因为我曾经也在拼多多上玩过这个体现800元的游戏,刚开始我也以为是骗人的,随便玩玩,后来觉得既然玩了就要狠下心来实验一下到底是不是真的。于云闪付推广不开来的原因大家议议?怎么说!说白了,银行自己没有推广的动力!找个第三方,给钱推广试试!肯定比现在强!有了第三方,有了为推广支出的费用,就有了利益链条!那,大家就都有了动力!说真的,银行的收付款平台,肯荣耀max系列真的有那么好用吗?感谢您的阅读!荣耀X30Max最近发布了。这款手机不仅拥有7。09英寸超大护眼阳光屏,还搭载有立体声双扬声器与5000mAh大电池。我觉得这样的大屏手机确实成为了很多消费者愿意去关
海信阅读手机焕新送福利日付6。6元起即享美好阅读体验道由白云尽,春与青溪长。时有落花至,远随流水香。闲门向山路,深柳读书堂。幽映每日白,清辉照衣裳。春天是一年中最美好的季节,不仅是外出踏青的好时节,更是读书学习的好时光。揽一卷书,沐显微镜望远镜?看完RedmiK30Pro配置后,K30Pro赢定了!近日,RedmiK30Pro的发布引来不少网友关注。据悉,该机搭载了高通骁龙865处理器并配备了长焦四摄立体式散热三星AMOLED屏幕。而这样的配置起售价仅为2999元,也确实能够国六大空间MPV中,瑞风M3plus凭借着多优势备受消费者认可随着我国经济的发展,汽车产业不断完善,大众汽车消费观也不断成熟,对MPV车型的安全舒适动力等各方面都有了高水准要求。为满足时下消费者对国六大空间MPV的需求,江淮商务车推出了瑞风M深度影响会计行业,OKEx讲解区块链的技术趋势哪些最新的IT信息技术将影响会计行业?6月20日揭晓了2020影响中国会计从业人员的十大IT信息技术评选结果,结果依次是财务云电子发票会计大数据技术电子档案RPA(机器人流程自动化养护兰花如何用好食醋?兰花本身为喜酸性土壤的植物,如果我们将兰花种植在偏碱性的土壤中或者土壤碱化,就很不利于兰花的生长,这时候可以为兰花浇灌点食醋。一定要把握好度。给兰花浇灌食醋最好与清水稀释后使用,以iQOO8和iQOO8Pro的热门手机的差别在哪?一屏幕和外观iqoo86。56英寸的10亿色2。5D柔性直屏,有传奇版极光燃三种颜色可选。iqoo8pro6。78英寸3D曲屏设计,是全新的E5新材料三星柔性屏,2K分辨率,超十亿按摩椅选择的5个大致标准1,按摩效果没有达到好的按摩效果,那你买按摩椅干什么!纯粹图便宜,那就别花钱好了,买了不好都还会加重状况呢!这样更是得不偿失。2,皮料等级a。增强型超细纤维皮(最好。材料价格最贵,开学在即。至青春时代的你让每一个阅读过的人士,都重新充满奋斗的力量。梦的实现在于心的追求,行动的背后才是苍生的验收,如果方向的指标是一个突破口,那么坚持就是让自己踏着原有的足迹向前迈出新的步骤。人生的道路据闻红米Redmi部分MIUI界面将与小米MIUI界面区分开来在我们如何看待,红米Redmi部分MIUI界面将与小米区分之前,我们更应该明白的是,小米为什么要这么去做!了解清楚了这个初衷和动向,对接下来的如何看待会有更精准的定位!事情初因目前20万元新能源中级车怎么选?小鹏P7VS比亚迪汉如果说几年前大部分中国消费者想买一台家用的中级车,第一反应还是日系天籁凯美瑞,德系帕萨特的话,那么近两年来随着市场上新能源车型的逐渐增多,中级车市场也迎来了大变局。特别是自主品牌的荣耀宣告与谷歌恢复合作,海外新机已获GMS授权看不见,理还乱的商业合作关系就是这样,本文是一个具有连贯性的分述篇章,前后逻辑还要从荣耀品牌独立前的阶段开启没有永恒的敌人,只有永恒的利益。单纯从商业上来说,有GMS的授权总比没有