你真的知道MySQL索引组织数据的形式吗??
创始人
2024-05-30 20:07:47
0

MySQL索引背后的数据结构

  • 前言
  • MySQL
  • MySQL背后的数据结构
    • B树
    • B+树

前言

好久不见,困扰了我许久的阴霾终于散去了,但是随之而来的是学校堆积如山的任务考试,这段时间不可否认我的学习效率和学习效果不是很佳,但是我之前就说过学习是需要贯穿程序猿一生的事情,流水不争先,争的是滔滔不绝,如果屏幕前的您真的遇到了不如意,不妨放慢脚步,放松自己,然后再投入到自己的事业中.

MySQL

我们日后工作大部分时间可能就是在对各种各样的数据库进行CURD,但是我们要掌握的却远远不止于此,这部分我没有写博客,是因为这部分的知识,不太好用文字的形式讲解,希望大家 可以多去使用使用,几遍下来就可以记住了.

MySQL背后的数据结构

前面都是引子,这才是我想通过这篇博客分享给大家的东西.
先说好,我现在默认兄弟们是了解MySQL的,所以新手看不懂不要骂阿涛!!
在日常使用中,我们使用查询的频率是要远远高于其他操作的,因此我们创建了索引,这样我们在查询数据的时候,就避免了每次都要遍历数据的尴尬,但是与此同时可能会拖慢增删改的步伐,但是正是因为我们查找的频率要远高于其他操作,所以总体上索引是利大于弊的.
在开始讲解数据结构的时候,我们就说过了,数据结构是组织数据的形式,那么我们想一想可以用什么数据结构来组织数据库中的庞大的数据呢?
Hash表?Hash表固然可以达到O(1)的时间复杂度,但是,数据表的结构注定了它没有办法返回一个范围内的数据.
二叉树?我们之前在使用二叉树的时候,有不少时候是可以感觉到,当数据量非常之大的时候,是有可能导致那个stack overflow错误的,因此我们可以使用B+树这个为数据库索引量身定做的数据结构,在了解B+树之前,我们先来了解一下B树.

B树

B树也可以叫做B-树,注意这里不是叫B减数,就是叫做B数.
B数可以认为是一棵N叉搜索树,二叉搜索树的概念之前我有专门的博客,二叉搜索树就是根的左子树的值比根小,右子树的值比根大,不存在两个一样的值.
那么根据名字我们可以想象到N叉搜索树的模样,现在根节点下面就不仅仅是挂着两两个子树了,可以挂好多棵子树,这样子在数据量相同的情况下,是不是总体树的高度就降低下来了?
在这里插入图片描述
我们可以看到B树与普通树的不同还远远不止与上述特点.
首先我们的每个节点现在可以存储多个值了,然后就比如我们节点中的值有两个,那么这棵子树就可以有它的三棵子树,左边是小的区间的,中间的树介于两个值之间,右边的值大的区间,
但是我们还是要抓住搜索树的本质特点,左子树的值永远要小于根节点的值,右子树的值永远要大于根节点的值.

B+树

B+树又在B树的基础上进行了优化.
在这里插入图片描述
可以看到总体上还是能看出这是一个N叉搜索树的样子的,但是其中还是有一点玄机的.
首先现在如果一个节点中有两个值,那么就只有两个子节点了,我们可以看到的是,子节点会把父亲节点给加上去,然后在B+树的最底层会以一种类似于链表的形式把所有的数据给连接起来.
B+树的特点:
1.一个节点可以存储N个key,N个key划分出了N个区间,而不是B树的N+1区间
2.每个节点中的key值,都会在子结点中存在,同时该key也是子节点的最大值
3.B+树的叶子节点,是首尾相连,类似于一个链表
4.整棵树的所有数据都是包含在叶子节点中的,由于叶子节点是完整的数据集合,所以我们只在叶子节点这里存储数据表的每一行的数据,而非叶子节点,只存key值即可

B+树的优势:
1.当前一个节点保存更多的key,最终树的高度是相对更矮的,查询的时候减少了IO访问次数,和B一样的效果
2.所有的查询最终都会落实在叶子节点上,查询任何一个数据最终的IO访问次数是一样的,即使提前找到了最终还是需要一直往下找到叶子节点为止,那里才是one piece.
B+树的这个稳定查询是很重要的,这个稳定是很关键的,稳定能够让程序猿对于程序的执行效率有一个更准确的评估
input-output:显示数据到显示屏上,从键盘输入数据,把数据写到硬盘上,从硬盘读数据,把数据写到网卡上,从网卡读数据,我们这里的IO特指访问硬盘
3.B+树的所有的叶子节点构成链表,比较方便进行范围查询:
查询学号>5并且<11的人,只需要先找到5所在的位置,再找到11所在的位置,从5沿着链表遍历到11,中间结果既是所求.
4.由于数据都在叶子节点上,非叶子节点只存储key,所以非叶子节点占用空间十分小,这里的非叶子节点就有可能在内存中缓存部分,又进一步减少了IO次数

刚才的B+树就是MySOL组织数据的方式,当你看到一张"表"的时候,实际上不一定就是按照"表格"的结构在硬盘上组织的,也有可能是按照这样树形结构组织,具体是哪种结构,取决于你的表里有没有索引,以及数据库使用了哪种存储引擎.

上面的树形结构就是"索引",如果这一列不能比较,就没有办法创建索引,幸运的是,MySOL里面的各种类型,都能比较,数字,字符串,时间日期,MySOL是不可以自定义类型的,上述结构默认Id是表的主键了,如果表里面有多个索引,表的数据还是按照id为主键,构建出B+树,通过叶子节点组织所有的数据行,其次针对name这一列,会构建另一个B+树,但是这个B+树的叶子节点就不再存储这一行的完整数据,而是存主键ID,此时根据mane来查询,查到叶子节点得到的只是主键id,还需要再通过主键id去主键的B+树里面再查询一次,一共查询两次B+树,上述过程称之为"回表",这个过程都是MySOL自动完成的,用户感知不到.

希望我的这篇博客对兄弟们能有所帮助,还是那句话,百年大道,你我共勉!

相关内容

热门资讯

技术培训班开班仪式领导致辞讲... 技术培训班开班仪式领导致辞讲话稿  随着社会不断地进步,我们都可能会用到讲话稿,讲话稿是讲话者为了在...
初三家委会发言稿 初三家委会发言稿范文  在现在的社会生活中,发言稿对我们的作用越来越大,发言稿的内容要根据具体情境、...
家长会老师发言稿 家长会老师发言稿(通用15篇)  随着社会一步步向前发展,我们使用上发言稿的情况与日俱增,发言稿的内...
防溺水安全教育国旗下讲话稿 2020年防溺水安全教育国旗下讲话稿范文(精选3篇)  在现在社会,我们都跟讲话稿有着直接或间接的联...
《这片土地是神圣的》的说课稿 《这片土地是神圣的》的说课稿  《这片土地是神圣的》文章被誉为是有史以来在环境保护方面最动人心弦的演...
小学四年级数学说课稿 小学四年级数学说课稿范文(精选3篇)  作为一位无私奉献的人民教师,很有必要精心设计一份说课稿,借助...
流浪救助新闻稿范文推荐9篇 流浪救助新闻稿范文 第一篇xx年5月19日下午。为弘扬雷锋精神,响应大学生诚信感恩教育主题要求,xx...
找规律评课稿 找规律评课稿  评课是加强教学常规管理,开展教育科研活,深化课堂教学改革,促进学生发展,推进教师专业...
学生文明表扬稿范文推荐22篇 学生文明表扬稿范文 第一篇20xx年7月25日上午,贵校新高二(8)、(9)班的名同学来到我们社区参...
鄂教版四年级下册科学《不同的... 鄂教版四年级下册科学《不同的声音》说课稿  尊敬的各位评委,各位老师:  你们好!  今天,我说课的...
小学语文课评课稿   导语:对语文教学而言,情是蕴涵在文本和生活中的情,认知是基于主体生活与心灵的认知。下面小编为你整...
盛世中国全文朗诵稿 盛世中国全文朗诵稿  在社会发展不断提速的今天,大家都接触过朗诵稿吧,朗诵,指清清楚楚的高声诵读。就...
《认识整万数》说课稿 《认识整万数》说课稿(精选8篇)  作为一名优秀的教育工作者,就有可能用到说课稿,说课稿有助于提高教...
设计的说课稿 设计的说课稿  作为一名为他人授业解惑的教育工作者,很有必要精心设计一份说课稿,编写说课稿助于积累教...
小学五年级中队长竞选稿 小学五年级中队长竞选稿尊敬的老师,亲爱的同学们:大家好!我是五年级一班的王君瑞,非常荣幸有机会参加这...
大学运动会优秀加油稿 大学运动会优秀加油稿  在当下社会,我们都可能会用到加油稿,借助加油稿可以激励他人的士气。怎样写加油...
小学三年级英语家长会教师发言... 小学三年级英语家长会教师发言稿各位家长:  大家好,很感谢各位家长在百忙中抽出时间来参加今天的家长会...
运动会加油稿鼓励语句 运动会加油稿鼓励语句  运动会的意义  运动会不仅丰富了员工的业余生活,还促进了大家相互间的交流,增...
小学语文花钟评课稿 小学语文花钟评课稿  在小学教师在听了花钟的教学之后,需要根据课中的表现写好相关的评课稿,那么应该如...
优秀家长的发言稿 优秀家长的发言稿(通用10篇)  在现在的社会生活中,发言稿对我们的作用越来越大,发言稿是作为在特定...