数据页长下面这样:

什么是数据区?#

在MySQL的设定中,同一个表空间内的一组连续的数据页为一个extent(区),默认区的大小为1MB,页的大小为16KB。16*64=1024,也就是说一个区里面会有64个连续的数据页。连续的256个数据区为一组数据区。

于是我们可以画出这张图:

从直观上看,其实不用纳闷为啥MySQL按照这样的方式组织存储在磁盘上的数据。

这就好比你搞了个Java的封装类描述一类东西,然后再相应的给它加上一些功能方法,或者用golang封装struct去描述一类对象。最终的目的都是为了方便、管理、控制。

约定好了数据的组织方式,那MySQL的作用不就是:按照约定数据规则将数据文件中的数据加载进内存,然后展示给用户看,以及提供其他能力吗?

数据页分裂问题#

假设你现在已经有两个数据页了。并且你正在往第二个数据页中写数据。

关于B+Tree,你肯定知道B+Tree中的叶子结点之间是通过双向链表关联起来的。

在InnoDB索引的设定中,要求主键索引是递增的,这样在构建索引树的时候才更加方便。你可以脑补一下。如果按1、2、3…递增的顺序给你这些数。是不是很方便的构建一棵树。然后你可以自由自在的在这棵树上玩二分查找。

那假设你自定义了主键索引,而且你自定义的这个主键索引并不一定是自增的。

那就有可能出现下面这种情况 如下图:

假设上图中的id就是你自定义的不会自增的主键

然后随着你将数据写入。就导致后一个数据页中的所有行并不一定比前一个数据页中的行的id大。

这时就会触发页分裂的逻辑。

页分裂的目的就是保证:后一个数据页中的所有行主键值比前一个数据页中主键值大。

经过分裂调整,可以得到下面的这张图。

一看就懂的:MySQL数据页以及页分裂机制相关推荐

  1. 一看就懂的MySQL教程

    一看就懂的MySQL教程 一.安装 二.卸载 三.配置 1.MySQL服务启动 2.MySQL登录 3.MySQL 退出 四.SQL 1.什么是SQL 2.SQL通用语法 3.SQL分类 1)DDL ...

  2. 一本书读懂大数据(每个人都看得懂的大数据入门书) - 电子书下载(高清版PDF格式+EPUB格式)...

    一本书读懂大数据(每个人都看得懂的大数据入门书)-黄颖 在线阅读                   百度网盘下载(635f) 书名:一本书读懂大数据(每个人都看得懂的大数据入门书) 作者:黄颖 格式 ...

  3. 一看就懂的MySQL的FreeList机制

    Hi,大家好!我是白日梦! 今天我要跟你分享的MySQL话题是:"了解InnoDB的FreeList吗?谈谈看!" 本文是MySQL专题的第 7 篇,共110篇. 一.回顾 前面几 ...

  4. mysql安装设置数据目录下,linux下安装mysql数据+配置

    <linux下安装mysql数据+配置>由会员分享,可在线阅读,更多相关<linux下安装mysql数据+配置(2页珍藏版)>请在人人文库网上搜索. 1.Redhat下安装My ...

  5. 一篇高中生都能看懂的MySQL入门博客(长文)

    写在前面: 本篇博客共一万五千字左右,是我自己对MySQL进行重新学习时写的,是一些偏基础的东西. 如果你对MySQL足够的了解,本篇博客最多只能起一个查漏补缺的作用. 博客的主要面向对象为:想学习了 ...

  6. MySQL索引B+数(超级好看,一看就懂!!!)

    概述 索引是一种数据结构,用于帮助我们在大量数据中快速定位到我们想要查找的数据. 索引最形象的比喻就是图书的目录了.注意这里的大量,数据量大了索引才显得有意义,如果我想要在 [1,2,3,4] 中找到 ...

  7. 【2022】全网最详细纯手工写YOLOv3之数据预处理,你必须看得懂(二)

    二. YOLO数据预处理流程 2.1 流程简述 原始数据一般是图片数据和标注数据,其中标注数据目前有两种,一种是VOC格式的.xml文件存储标注信息,另外一种标注格式CoCo用json来存储标注信息, ...

  8. 轻松看懂和绘制数据流程图

    数据流程图是比较通用的软件建模模型,它可用于需求分析阶段和系统设计阶段的建模.数据流程图被很多程序员使用,是因为它简单易懂,从事项目的开发人员只要通过查看流程图就能明白系统紧密结合的各个部分.数据流程 ...

  9. 使用OGG/Kettle实现Oracle到MySQL数据平滑迁移

    本文目录: 一.OGG概述 (一)OGG逻辑架构 二.迁移方案 (一)环境信息 (二)表结构迁移 (三)数据迁移 1.源端OGG配置 (1)Oracle数据库配置 (2)Oracle数据库OGG用户创 ...

  10. linux指令-一看就懂

    linux基础命令新手版 解释每个命令的释义 让你知其所以然 代码复制可直接使用 让你零基础学linux 写在前面 # 一.指令的帮助即解释 # 1. man: manualsman ls# 可能对于 ...

最新文章

  1. 2009年2月Windows Mobile Webcast预告
  2. 给 COLA 做减法:应用架构中的“弯弯绕设计”
  3. list转datatable
  4. Spring 核心和容器的一般更新
  5. java Calendar
  6. 【错误解决】[Maven] cannot be opened because it does not exist错误[文件无法编译到target目录下的解决方法]...
  7. 已知信码序列为1011_信息论与编码理论习题答案解析.doc
  8. 大数据从入门到就业的四个必备常识
  9. 没什么本钱怎么做生意?
  10. Windows下MySQL的详细安装教程
  11. [msi]Cannot open database file. System error -2147287035
  12. C语言中你可能会用到的字符串函数的代码
  13. First flight, Let's do it!
  14. C的byte数组在python中的处理
  15. cmake install_CMAKE入门实战
  16. Dev C++调试程序方法详解
  17. 几种有趣的Magic Matrix
  18. Java变量命名规范
  19. java-net-php-python-java校园约球网站计算机毕业设计程序
  20. latex_箭头上加斜杠

热门文章

  1. Java面试题(十四)----- 如何获取父类的类名字 ? 如何获取当前运行类的类名
  2. Python百度文库爬虫之txt文件
  3. 使用jvisualvm远程监控服务器jvm步骤详解
  4. 打响碎片时间保卫战!2020第一战!!
  5. 房屋千千万,如何找到便宜实惠的呢,python采集数据并做数据可视化~
  6. C/C++ strcpy() 函数实现
  7. 【Facebook招聘笔试】查找相同URL
  8. git 同步服务器文件,同步本地 / 服务器代码 - Git 篇
  9. 数据库集群方案及Oracle RAC架构分析
  10. 爬虫精进(四) ------ 带参请求/伪装成真实浏览器