MySQL:磁盘数据页的存储结构


prtyaa
prtyaa 2023-12-28 15:52:37 50588
分类专栏: 资讯

在深入研究索引之前,先来看看磁盘上的数据文件中的数据页的物理存储结构,因为 后续研究索引的物理存储结构以及使用原理的时候,都是跟数据页的物理存储结构是有很大关联的。

数据库最终所有的数据(包括建的各种表以及表里的数据)都是要存放在磁上的文件里的,然后在文件里存放的物理格式就是数据页,那么大量的数据页在磁盘文件里是怎么存储的呢?

大量的数据页是按顺序一页一页存放的,然后两两相邻的数据页之间会采用 双向链表的格式互相引用,大致看起来如下图所示。

这个图在磁盘文件里到底是怎么弄出来的啊? 其实一个数据页在磁盘文件里就是一段数据,可能是二进制或者别的特殊格式的数据,然后数据页里包 含两个指针,一个指针指向自己上一个数据页的物理地址,一个指针指向自己下一个数据页的物理地 址,大概可以认为类似下面这样。

一个数据页内部会存储一行一行的数据,也就是平时在一个表里插入的一行一行的数据就会存 储在数据页里,然后数据页里的每一行数据都会按照主键大小进行排序存储,同时每一行数据都有指针 指向下一行数据的位置,组成单向链表,如下图。

每个数据页里都会有一个页目录,里面根据数据行的主键存放了一个目录,同时数据行是被分散存 储到不同的槽位里去的,所以实际上每个数据页的目录里,就是这个页里每个主键跟所在槽位的映射关 系,如下图所示。

Q:没有索引的时候,是如何查找数据的?

A:假设根据主键查找一条数据,而且假设那个表总共就一个数据页,那么就太简单了!首先到数据页的页目录里根据主键进行二分查找,找到主键对应的槽位,然后去槽位里遍历槽位里每一行数据,就能快速找到那个主键对应的数据了。

A:如果不跟据主键找的话,那就没办法使用主键的那种页目录来二分查找的,只能进入到数据页里,根据单向链 表依次遍历查找数据了,这就性能很差了。

如果有很多个数据页的话,如果没有索引,无论是根据主键还是非主键查询都性能差因为如果第一个数据页里没有想要的数据,就得从第二个数据页里找,这似乎就是全表扫描了。而且数据页都是加载到buffer pool里了,占内存。最坏的情况下,得把所有数据页里的每条数据都得遍历一遍,才能找到需要的那条数据,那条数据在最后一个数据页的最后面存着,这就是全表扫描了!

网站声明:如果转载,请联系本站管理员。否则一切后果自行承担。

本文链接:https://www.xckfsq.com/news/show.html?id=31729
赞同 0
评论 0 条
prtyaaL2
粉丝 1 发表 2553 + 关注 私信
上周热门
如何使用 StarRocks 管理和优化数据湖中的数据?  2966
【软件正版化】软件正版化工作要点  2885
统信UOS试玩黑神话:悟空  2856
信刻光盘安全隔离与信息交换系统  2743
镜舟科技与中启乘数科技达成战略合作,共筑数据服务新生态  1277
grub引导程序无法找到指定设备和分区  1244
华为全联接大会2024丨软通动力分论坛精彩议程抢先看!  169
2024海洋能源产业融合发展论坛暨博览会同期活动-海洋能源与数字化智能化论坛成功举办  168
点击报名 | 京东2025校招进校行程预告  164
华为纯血鸿蒙正式版9月底见!但Mate 70的内情还得接着挖...  161
本周热议
我的信创开放社区兼职赚钱历程 40
今天你签到了吗? 27
信创开放社区邀请他人注册的具体步骤如下 15
如何玩转信创开放社区—从小白进阶到专家 15
方德桌面操作系统 14
我有15积分有什么用? 13
用抖音玩法闯信创开放社区——用平台宣传企业产品服务 13
如何让你先人一步获得悬赏问题信息?(创作者必看) 12
2024中国信创产业发展大会暨中国信息科技创新与应用博览会 9
中央国家机关政府采购中心:应当将CPU、操作系统符合安全可靠测评要求纳入采购需求 8

加入交流群

请使用微信扫一扫!