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

这样理解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

10。12DOT行情分析消息面今天下午波卡生态预言机协议Paralink将进行版本更新10月12日消息,波卡生态预言机协议Paralink发布消息称正在进行版本更新相关工作。目前,Paralink团队正在10。13ETH晚间分析日线级别来看和昨天走势差不多,macd多头缩量,kdj三线向下,看来币价还有回落,4小时级别看,目前以太价格在布林带下轨一线上下徘徊,上方5日均线跟布林带中轨一线交叉形成上方阻力区10。14ETH行情分析及观点昨天以太的表现还是很强的收了一跟大阳,比特币和以太方向还是一致的昨日以太同样收了一根下影线比较长的接近光头的阳K线,低点在3410一线,而高点去到了3610一线,目前也已突破昨日收40小时超长续航的蓝牙耳机,SoundcoreLifeNote的体验最初结识Anker(安克),缘于一款60wPD快充套装,这款充电套装在我实际测评过程中,无论是做工细节,还是充电稳定性,都非常的优秀,也让我对安克这个国产品牌有着较好的印象,近期安新天绿能三季度净亏5166万元,460亿高额债务压力空前时代商学院研究员郑少娜在政府存量补贴逐步退出的情况下,新能源高度依赖政府补贴的初期状态已成为过去式,行业进入平价时代,而行业自身成本降低提高效率将成为驱动新能源行业长期成长的驱动因想用到2021,2017你该怎么选手机?这几款可以闭眼入不要笑!假如有一天你穿越回了2017,最大的问题是,应该买什么手机好呢?今天,就让我们介绍几部从现在看,2017年极其值得购买的手机!一荣耀V10当时这部手机找了赵丽颖代言,网上吹PGYTECH快拆四件套这能用那能用都能用摄影摄像行业,发展到今天,除了一些瓶颈外,生产周边的厂商也是非常多,而在方便实用方面,任何配件都不能替代快拆这种配件。有了快拆这个配件,可以轻松的让我们各个设备之间切换。而设备的通久旱之甘霖离合这样踩,科目二科目三早过了汽车增多和路况变得复杂,这都促进了驾照考试的改革,要知道不同时间的驾照考试难度都不同。在之前,驾照考试往往需要人工评判,这也就使得驾照能否考出多了一些人为因素,随后,驾照考试迎来了科三挂科几率高,多半是不注意这三点考驾照有多难?每个人车主的答案都不同,有些车主运气和实力并存,驾考的所有科目一遍过,当然也有一些学员在考试中总是挂科,连续重考了几次才通过。在驾照考试中的四个科目中,科目一和科目四电动车符合这两个标准,需要持证上路,有C1驾照的车主注意了我国拥有了世界上最大的电动车生产销售市场,虽然电动车并不像汽车市场那样繁荣,但是依旧不能小瞧,我国的电动车在国外市场拥有了很高的名气和销量。电动车在这些年中的发展非常迅速,不仅拥有旧电动车置换有猫腻,外行人可能不懂,内行人讲出门道电动车新国标和新交规正在如火如荼进行中,大家在网上可以看到有些地区的过渡期已经结束,这种情况下超标电动车就无法正常使用了。对于不符合新国标电动车的处理方法一共有两个其一就是以旧换新
功不可没,realme首销全平台双冠军,1秒破亿这段时间有几个通过我的推荐果断安排了realme真我GT大师系列的朋友们都在迫不及待地问我多久能付尾,看到评价区有不少抢先订的粉丝们已经用上了,着实让人羡慕。好在今天的0点开始已经中国纯电小型车出行报告来了,五菱占比过半!吉利长城无缘热门明显能看出,近两年国内的小型电动车市场在车型布局整体销量上,相比前几年来说均是有着更为可观的表现而且在市场扩张适用地区等方面,纯电动小型车也不再局限于一二线城市,因为四五线城市的市小米手机隐藏的不为人知的小设置如今,手机市场手机品牌众多,不同的手机品牌都有不同的小技巧,这些小技巧一般都是不为人知的,巴不得用户找不到今天就跟着小编一起看看吧。广告推荐设置手机管家1打开手机管家2点击右上角的以鲲鹏之名,奇瑞新款瑞虎8官图发布,7月中下旬上市首款搭载奇瑞鲲鹏动力的车型瑞虎8,官方公布了新车的图片,从官图来看,新款瑞虎8品质感营造得非常好,加上2。0TGDI发动机的加持,如果定价合适,新款瑞虎8的竞争力会大大加强。瑞虎8微信广点通里的货到付款,到底隐藏了多少骗局?经常刷微信的人,都会看到不少货到付款仅在本页面一折的广告。这些广告的页面点开,多看几个,都会看到熟悉的配方熟悉的画面,相像到以为页面都是一个设计师做的,一股浓浓的曾经电视直销风迎面海南航空MOMAHiBling飞机清洗机器人HiBling飞机清洗机器人造型具备科幻色彩,设计师在考虑钣金工艺实现性的前提下,通过大量斜面与斜线的运用营造出一种很强的视觉冲击力。将一些隐形战机的元素结合在其中,整体科技感十足vivoX27Pro新鲜预售!一篇文章了解Ta的时尚答卷随着科技与时尚的不断融合,实用性与美的共同体应运而生。当更大的屏幕占比被运用到机身设计,带来的不仅是屏幕视野的延伸,还有修长机身带来的时尚外观。当海洋的灵感成为机身颜色,修长机身被互联网家谱到底是不是新鲜事儿?修谱作为一种民族文化的传承,在五千年历史的文化长河中,一直有着不可替代的作用。历史是永远有记载的,家族家谱也是记载传宗传代及辈份。一个家族如果失去了谱,那就失去祖次辈份的尊称了?没雾霾来临,这款主动换气的口罩帮助呼吸新鲜空气忻风动力口罩冬天的北方,洁白的雪,美丽的冰面是一道风景,在近几年又多了一样雾霾,雾霾伴随着有害的PM2。5颗粒物和模糊的视野,对我们的生活出行健康都有危害,市面上也出现了各种防雾霾口罩,对空气广州某男子因上班没戴口罩,被公司开除?法院判得太精彩了员工上班不戴口罩,公司可以出警告信吗?公司出三封警告信,就能辞退员工吗?公司出警告信的标准是什么?现在疫情得到有效控制,相信大部分上班已经不戴口罩了。但是回想起2020年3月刚刚复大型真香现场!小米11首卖五分钟销售额高达15亿!网友爽了和约定的时间一样,小米11准时的在今天0点开售了。不管是线下还线上,都有不少消费者在关注这款手机,作为全球第一款搭载骁龙888处理器的手机,性能表现毋庸置疑,而且此次小米11还把摄