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

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

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

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

DataPage: xx=xx, xx=xx, linked_list_pre_pointer=15367, linked_list_next_pointer=34126
|| DataPage: xx=xx, xx=xx, linked_list_pre_pointer=23789, linked_list_next_pointer=46589
|| DataPage: xx=xx, xx=xx, linked_list_pre_pointer=33198, linked_list_next_pointer=55681
上面这段示例数据,当然不能完全认为是MySQL数据库的磁盘文件里的存储格式,但是这里就是给你看一些类似的东西,其实MySQL实际存储大致也是类似这样的,就是每个数据页在磁盘文件里都是连续的一段数据。然后每个数据页里,可以认为就是DataPage打头一直到 || 符号的一段磁盘里的连续的数据,你可以认为每一个数据页就是磁盘文件里这么一段连续的东西。

然后每个数据页,都有一个指针指向自己上一个数据页在磁盘文件里的起始物理位置,比如linked_list_pre_pointer=15367,就是指向了上一个数据页在磁盘文件里的起始物理位置,那个15367可以认为就是在磁盘文件里的position或者offset,同理,也有一个指针指向自己下一个数据页的物理位置。

再回头看一下上面那个图,是不是就理解了一个磁盘文件里的多个数据页是如何通过指针组成一个双向链表的!

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

磁盘数据页的存储结构相关推荐

  1. 深入理解InnoDB(2)—页的存储结构

    1. 记录头信息 上一篇博客说到每行记录都会有记录头信息,用来记录每一行的一些属性 Compact行记录的记录头信息为例 1.1 delete_mask 这个属性标记着当前记录是否被删除,占用1个二进 ...

  2. 分段地址变换过程c语言,段页式存储结构

    段.页式存储都是采用离散分配方式的.离散分配方式:允许一个进程直接分散地装入到许多不相临的分区中,可以更好的提高内存利用率. 一.基本分页存储 1.分页存储方式原则 把逻辑进程分为若干页:把实际内存分 ...

  3. 【mysql】-【innodb数据存储结构】

    文章目录 数据库的存储结构:页 磁盘与内存交互基本单位:页 页结构概述 页的大小 页的上层结构 页的内部结构 File Header(文件头部)和File Trailer(文件尾部) File Hea ...

  4. (八)InnoDB数据存储结构

    InnoDB数据存储结构 1.数据库的存储结构:页 1.1.磁盘与内存交互基本单位:页 1.2.页的结构概述 1.3.页的大小 1.4.页的上层结构 2.页的内部结构 第1部分:File Header ...

  5. MySQL进阶 - InnoDB数据页结构

    不同类型的页简介 前边我们简单提了一下页的概念,它是InnoDB管理存储空间的基本单位,一个页的大小一般是16KB.InnoDB为了不同的目的而设计了许多种不同类型的页,比如存放表空间头部信息的页,存 ...

  6. 阿里面试乔戈里被问:MySql数据是如何存储在磁盘上存储的?

    关于MySql数据库,相信很多人都不陌生,这是当今最常用的一种关系型数据库,关于MySql的知识也是很丰富的. 那么,不知道大家有没有想过这样的问题:MySql中的数据是存在哪的?又是如何存储的呢? ...

  7. InnoDB数据存储结构

    数据库的存储结构:页 索引结构给我们提供了高效的索引方式,不过索引信息以及数据记录都是保存在文件上的,确切说是存储在页结构中.另一方面,索引是在存储引擎中实现的,MySQL服务器上的存储引擎负责对表中 ...

  8. 深入理解InnoDB(3)—索引的存储结构

    1. 索引的各种存储结构及其优缺点 1.1 二叉树 优点: 二叉树是一种比顺序结构更加高效地查找目标元素的结构,它可以从第一个父节点开始跟目标元素值比较,如果相等则返回当前节点,如果目标元素值小于当前 ...

  9. 《MySQL是怎么样运行的》读书笔记一 数据页+索引

    登录MySQL cmd命令行中输入:mysql -hlocalhost -uroot -p 之后输入密码. 对于Windows系统来说,默认的用户名是ODBC,你可以通过设置环境变量USER来添加一个 ...

最新文章

  1. Java设计模式之适配器模式
  2. 20151217:Web之Repeater使用:添加
  3. ASP.NET Core 介绍和项目解读
  4. 采用HttpModules来重写URLs(原理篇)转
  5. 利用锁分析器进行线程竞争检测
  6. Linux命令之cut详解
  7. EastFax传真服务器与单机传真软件什么区别
  8. 条件数、奇异值与海森矩阵
  9. HDU3665Seaside(最短路径)
  10. iOS移动开发1x 、2x 、3x图片介绍
  11. 绿幕抠图在手机上使用认识.
  12. Jenkins教程(六)脚本与方法执行效果不合预期,如何及时中止pipeline
  13. 变量定义和声明的区别(整理)
  14. 计算机网络举例说明,什么是计算机网络,举例说明计算机网络有哪些应用?
  15. 基于BPM的低代码平台如何选型
  16. Java---点名---最简
  17. 云计算厂商决战2020:虽分高下,但不决生死
  18. Python爬虫入门-利用scrapy爬取淘女郎照片
  19. 【Visio2003两根线重叠凸起如何让解决】
  20. 迪文屏幕T5L平台学习笔记七:RS485测试

热门文章

  1. openGauss数据库源码解析系列文章——openGauss开发快速入门(二)
  2. 元宇宙,现实与虚拟交互的新一代互联网?
  3. css如何实现字体为10px
  4. vs2017c语言一闪而逝6,Visual Studio IDE编写程序时不显示窗口或窗口一闪而逝的解决方法...
  5. vmlinuz文件解压缩
  6. 贪吃蛇(C语言版)链表实现
  7. 爬取私募排排网历史净值和破解加密数值(上)
  8. python极客项目编程pdf微盘下载_《Python极客项目编程 》——2.4 完整代码
  9. 助力移动物联网开启高质量发展新征程,芯讯通获“2022年移动物联网先进企业”奖
  10. 【历史上的今天】9 月 13 日:“海盗湾”创始人出生;第一台装载硬盘的超级计算机;《超级马里奥兄弟》发布