码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • MySQL的InnoDB页结构(数据页)


    笔记大纲

    • 1.数据页的结构总览
    • 2.记录在页中的存储和排列
    • 3.Infimum记录和Supremum记录
    • 4.记录的行格式
      • 4.1 delete_flag 删除标志位
      • 4.2 next_record 下一个记录相对指针(重要)
    • 5.记录的存放方式
    • 6.Page Directory 页目录
    • 7.Page Header 页头
    • 8.File Header 文件头
    • 9.File Trailer 文件尾

    1.数据页的结构总览

    在这里插入图片描述

    2.记录在页中的存储和排列

    在这里插入图片描述

    用户的数据记录存放在User Records的部分,一个页生成的时候是没有User Records的,当有记录需要插入进来的时候通过去Free Space申请空间,如果足够的话那么就会开辟User Records空间作为记录空间。如果Free Space的空间不够了,就会申请新的页。
    用户数据的记录在User Records中是密集无缝隙的排列,且按照主键的大小从小到大单向链表排列。

    3.Infimum记录和Supremum记录

    InnoDB在设计时,在为每个页都分配了2个内置的记录,这个记录并不是用户真实记录。
    Infimum记录表示一个页中最小的记录。
    Supremum记录表示一个页中最大的记录。
    也就是说在一个页里,没有任何一个真实记录小于Infimum,没有一个真实记录大于Supremum。

    4.记录的行格式

    在这里插入图片描述

    4.1 delete_flag 删除标志位

    这个记录属性在记录头中代表该记录是否被删除,占用1个bit位。InnoDB删除数据并不是立即从磁盘上抹掉,而是设置标志位然后将记录放入垃圾链表,这个被标记了删除的记录此时仍然占据着空间,后续如果有新的记录插入,且主键大小在这里,那么就会覆盖。

    4.2 next_record 下一个记录相对指针(重要)

    next_record表示当前记录的真实数据位置到下一条记录真实数据位置的相对偏移量,注意不是记录的相对位置,而是记录里面真实数据的相对位置。
    由于记录的可变长、null值列表等信息是逆序存放,查找的时候有更高的高速缓存命中率。

    5.记录的存放方式

    在这里插入图片描述

    记录在user_records空间中通过单向链表来串联存放。

    6.Page Directory 页目录

    因为记录是链表形式存放,如果遍历的时候最坏的情况时间复杂度是O(n),为了提高检索的效率,InnoDB采用了目录 + 二分法来提高数据查询效率。页目录就是一个单独提取出来的记录目录。
    槽:InnoDB将数据记录按4~8个为一组,提取出最大记录的偏移量存放到页目录中,加快检索速度,通过二分查找法快速定位。

    7.Page Header 页头

    记录页的元数据信息,例如页的记录数、页目录有多少个槽、页的类型、页在B+Tree的层级等信息。

    8.File Header 文件头

    记录当前页的上一个页、下一个页的页号、页属于哪个表空间、页号等信息。
    页号:唯一标识一个页的ID,不重复。
    页的排列:通过文件头的指针,双向链表关联。

    9.File Trailer 文件尾

    用来校验数据页的完整性,固定8字节长度。数据页刷回磁盘时,为了保证页的完整性。
    文件头和文件尾都存放着校验信息,因为文件头先刷入磁盘,这样可以校验文件头和文件尾的校验和是否一致来判断页是否完整。

  • 相关阅读:
    redis 哨兵集群搭建
    Ubuntu安装截图工具Shutter及使用
    MySQL学习笔记27
    java计算机毕业设计慧学IT精品课程网站源码+mysql数据库+系统+lw文档+部署
    【Java基础系列】运算符和类型转换
    C++ 类型转换
    从“AI玩具”到“创作工具”的云原生改造之路
    Vue 3.0 + vite + axios+PHP跨域问题的解决办法
    变量使用volatile和不使用volatile的区别
    python基于GDAL的多线程高速批量重采样、对齐栅格、对齐行列数,并无损压缩
  • 原文地址:https://blog.csdn.net/qq_42290561/article/details/125610030
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号