首页 > 其他分享 >InnoDB页结构简述

InnoDB页结构简述

时间:2023-07-01 19:57:18浏览次数:31  
标签:字节 记录 链表 record 简述 InnoDB 页面 Page 结构

InnoDB数据页结构

数据页结构概览

名称 占用字节
File Header(文件头部) 38字节
Page Header(页面头部) 56字节
Infimum+Supremum(页面中的最小记录和最大记录) 26字节
User Records(用户记录) 不确定
Free Space(空闲空间) 不确定
Page Directory(页目录) 不确定
File Trailer(文件尾部) 8字节

记录在页中的存储

User Records部分负责按照指定的行格式存储记录。 每插入一条新记录,都需要从Free Space里申请新的空间。 如果Free Space的全部空间都用完了, 那么这个页也用完,需要申请下一个页了。记录紧密地存储在一起,形成堆(heap)。记录头信息中会保存每条记录在堆中的相对位置,称为heap_no。值得注意的是,在每个页中会额外存储两个记录,一条代表页面中的最小记录(Infimum记录),一条代表页面中的最大记录(Supremum记录)。这两条记录拥有最小的heap_no,相对位置也最靠前。
页中的记录是按照主键的大小比较大小的。头信息中的next_record会保存当前记录的真实数据到下一条记录的真实数据的距离。自然,从这里可以看出,记录实际上是以链表的形式存储的。链表是按照主键大小串联起来的。链表开头就是Infimum记录,结尾是Supremum记录。如果某条记录被删除,该条记录的deleted_flag会被标记为1,next_record也会变成0,上条记录的 next_record也会产生相应变化。但是该条记录并不会被物理删除以防下次再次使用。 n_owned也会产生相应变化,这里暂且不谈。如果删除的记录很多,会利用原始的next_record信息产生一个垃圾链表。

Page Directory(页目录)

为了方便进行大量数据的查找,InnoDB会采用页目录方便查找。其步骤可以归纳为:
1、将包括Infimum记录和Supremum记录在内的所有记录划分为几个组
2、每个组内最后一个(也就是最大的)记录的头信息中的n_owned属性会记录该组总共有多少记录。
3、将每个组最后一条记录的地址偏移量(即该记录的真实数据与页面中第0个字节之间的距离)单独提取出来,按顺序存储到Page Directory(页目录)。页目录中的这些偏移量称为槽(Slot),每个槽占用2个字节。

标签:字节,记录,链表,record,简述,InnoDB,页面,Page,结构
From: https://www.cnblogs.com/wyfc4/p/17519821.html

相关文章

  • Innodb行格式
    InnoDB行格式InnoDB是一个将表中的数据存储到磁盘上的存储引擎。为了方便磁盘与内存的读取,InnoDB以页的格式存储数据。我们可以通过SHOWGLOBALVARIABLESLIKE'innodb_page_size';的方式查看页的大小。一般来说,页的大小会设置为16384(16KB)。我们以记录为单位向表中插入数据......
  • 类文件结构
    类文件结构JVM的“无关性”谈论JVM的无关性,主要有以下两个:平台无关性:任何操作系统都能运行Java代码语言无关性:JVM能运行除Java以外的其他代码Java源代码首先需要使用Javac编译器编译成.class文件,然后由JVM执行.class文件,从而程序开始运行。JVM只认识.......
  • Redis数据结构——快速列表(quicklist)1
    Redis数据结构——快速列表(quicklist)一、什么是quicklistquicklist是Redis3.2版本以后针对链表和压缩列表进行改造的一种数据结构,是zipList和linkedList的混合体,相对于链表它压缩了内存。进一步的提高了效率。quicklist其实就是简单的双链表,但每个双链表节点中保存......
  • Redis数据结构——快速列表(quicklist)
    Redis数据结构——快速列表(quicklist)一、什么是quicklistquicklist是Redis3.2版本以后针对链表和压缩列表进行改造的一种数据结构,是zipList和linkedList的混合体,相对于链表它压缩了内存。进一步的提高了效率。quicklist其实就是简单的双链表,但每个双链表节点中保存......
  • 01修建结构
    1非结构化剪枝1.1.1细粒度剪枝细粒度剪枝是一种特定类型的剪枝方法,它指的是单个权重级别的剪枝。在细粒度剪枝中,模型中的每一个权重都会被独立地考虑是否需要被剪枝。这种方法的优点是可以非常精确地控制模型的大小和复杂性,因为可以精确地选择哪些权重需要被剪枝。然而,这也是一......
  • 10.11 定义枚举结构
    demo1在枚举类中定义成员属性与方法enumColor{ //枚举类 RED("红色"),GREEN("绿色"),BLUE("蓝色"); //枚举对象要写在首行 privateStringtitle;//成员属性 privateColor(Stringtitle){//构造方法初始化属性; this.title=title; } @Override publicStrin......
  • C/C++《数据结构课程设计》题目[2023-07-01]
    C/C++《数据结构课程设计》题目[2023-07-01]《数据结构课程设计》题目一、【大数四则运算】——线性表[习题描述]设计—个实现任意长的整数进行四则运算和幂次运算的演示程序。[基本要求]利用双向循环链表实现大数的存储,每个结点含一个整型变量。[实现提示]实现原理:任何一......
  • Python-练脑系列-04依旧是数据结构
    前言......
  • postgresql数据库查看表结构
      2、 ......
  • 数据结构和算法-2023.06.30
    动态链表的生成和初衷......