MySQL:索引的页存储物理结构,是如何用B+树来实现的?


prtyaa
prtyaa 2024-01-27 23:42:49 65091 赞同 0 反对 0
分类: 资源
假如有大量的数据,就有大量的数据页,那么主键目录里就要存储大量的数据页和最小主键 值,这显然不行啊,一个主键目录就要存这么多东西?

下来就诞生了索引页。表的实际数据是存放在数据页里的,表的索引也是存放在页里的,此时索引 放在页里之后,就会有索引页,假设有很多很多的数据页,那么就可以有很多的索引页,此时 如下图所示,网上摘抄的别人的图。

那么现在根据主键id查找一行数据,怎么找?此时有很多的索引页,怎么根据id查找数据?就上图来说,是去索引页20里找?还是去索引页28里找?这也是个大问题,接下来又可以把索引页多加一个层级出来,在更高的索引层级里,保存了每个索引页和索引页 里的最小主键值,如下图所示。

这样的话,如果要找id=40这条数据,就可以在索引页35里二分查找,可以看到1<40<58,所以只能去索引页20里去找数据。假如最顶层的那个索引页里存放的下层索引页的页号也太多了,怎么办呢? 此时可以再次分裂,再加一层索引页,比如下面图里那样子

索引页不知不觉中组成了多个层级,搞的是不是有点像一棵树? 没错了,这就是一颗B+树,属于数据结构里的一种树形数据结构,所以一直说MySQL的索引是用B+树 来组成的,其实就是这个意思。

所以,以最简单最基础的主键索引来举例,为一个表的主键建立起来索引之后,其实这个主键的索 引就是一颗B+树,要根据主键来查数据的时候,直接就是从B+树的顶层开始二分查找,一层 一层往下定位,最终一直定位到一个数据页里,在数据页内部的目录里二分查找,找到那条数据。 这就是索引最真实的物理存储结构,采用跟数据页一样的页结构来存储,一个索引就是很多页组成的一 颗B+树。索引页+数据页组成的B+树就是聚簇索引

如果一颗大的B+树索引数据结构里,叶子节点就是数据页自己本身,那么称这颗 B+树索引为聚簇索引!

如果您发现该资源为电子书等存在侵权的资源或对该资源描述不正确等,可点击“私信”按钮向作者进行反馈;如作者无回复可进行平台仲裁,我们会在第一时间进行处理!

评价 0 条
prtyaaL1
粉丝 1 资源 1949 + 关注 私信
最近热门资源
国产操作系统环境搭建(内含镜像资源链接和提取码)  89
银河麒麟桌面操作系统V10SP1-2403-update1版本中,通过“麒麟管家-设备管理-硬件信息-硬盘”查看硬盘类型时,显示的是HDD(机械硬盘),而实际上该笔记本的硬盘类型为SSD  88
分享几个在日常办公中可以用到的shell脚本  81
以openkylin为例编译安装内核  79
bat脚本生成查看电脑配置\硬件信息  78
常见系统问题及其解决方法  77
分享解决宏碁电脑关机时自动重启的方法  75
统信uosboot区分未挂载导致更新备份失败  69
分享如何解决报错:归档 xxx.deb 对成员 control.tar.zst 使用了未知的压缩,放弃操作  69
统信uos安装mysql的实例参考  63
最近下载排行榜
国产操作系统环境搭建(内含镜像资源链接和提取码) 0
银河麒麟桌面操作系统V10SP1-2403-update1版本中,通过“麒麟管家-设备管理-硬件信息-硬盘”查看硬盘类型时,显示的是HDD(机械硬盘),而实际上该笔记本的硬盘类型为SSD 0
分享几个在日常办公中可以用到的shell脚本 0
以openkylin为例编译安装内核 0
bat脚本生成查看电脑配置\硬件信息 0
常见系统问题及其解决方法 0
分享解决宏碁电脑关机时自动重启的方法 0
统信uosboot区分未挂载导致更新备份失败 0
分享如何解决报错:归档 xxx.deb 对成员 control.tar.zst 使用了未知的压缩,放弃操作 0
统信uos安装mysql的实例参考 0
作者收入月榜
1

prtyaa 收益401.13元

2

zlj141319 收益237.91元

3

哆啦漫漫喵 收益231.75元

4

IT-feng 收益219.92元

5

1843880570 收益214.2元

6

风晓 收益208.24元

7

777 收益173.17元

8

Fhawking 收益106.6元

9

信创来了 收益106.03元

10

克里斯蒂亚诺诺 收益91.08元

请使用微信扫码

添加我为好友,拉您入交流群!

请使用微信扫一扫!