zoukankan      html  css  js  c++  java
  • InnoDB记录存储结构

    InnoDB是一个将数据存储到磁盘上的存储引擎。对于更新/写入的数据,先将数据从磁盘中加载到内存,更新后再将数据刷新到磁盘。

    行格式

    而磁盘与内存交互的数据,InnoDB采取将数据分为若干,一页一般为16kb,以页为单位磁盘与内存之间交互传输。表中的数据一般是以记录为单位进行操作,页中最少存储两条记录,而记录在磁盘上存放的方式被称为行格式/记录格式;

    在创建表时声明 ROW_FORMAT=行格式名称

    InnoDB设计了四种行格式

    • compact

    image_1c9g4t114n0j1gkro2r1h8h1d1t16.png-42.4kB

    记录的额外信息
    •  变长字段长度列表:变长字段即varchar/varchary/text/blob等,列表内存放记录中这些字段真实数据占用的字节长度,列表形式按列的顺序逆序存放;
      •  表示真正字符占用的字节数:如果某个可变字段允许存储的最大字节数(字符数*字符集maxLen)超过255字节并且真实存储的字节数超过127字节则使用2个字节,反之1个字节。那么总的字节数为各个变长字段占用字节数相加。不保存null值列的长度。如果没有变长字段则没有这个部分。
    •   NULL值列表:存储该记录值为null的列。
      • 首先统计允许存储null的列,并将每个允许存储null的列对应一个二进制位(列值为null二进制为1,反之为0),二进制位按照列的顺序逆序排列;
      • 最后,null值列表表示需为整数个字节(一个字节8位),即二进制位个数没有满足的高位补0,比如有三个字段可为null,不足一个字节,那么表示为00000111,十六进制为0x07,如果表中有超过9个字段均为null,则用两个字节表示。
    •  记录头信息:由5个字节(40位)组成。
    •    记录的真实数据:除了用户自定义的列,MySQL还会为每个记录默认添加一些列
      • DB_ROW_ID:没有定义主键及唯一键才会添加
      • DB_TRX_ID
      • DB_ROLL_PTR
    •  真实列:
      • 不管什么字符集下,某字段声明为char(10),但实际长度为2字节,那么将会用空格字符填充剩下8个 字节;varchar没有这个要求。

    对于CHAR(M)类型的列来说,当列采用的是定长字符集时,该列占用的字节数不会被加到变长字段长度列表,而如果采用变长字符集时,该列占用的字节数也会被加到变长字段长度列表

      • 当前记录,某字段实际值为null,将存储在null值列表,不在这里存储
      • 每个字段存储以字符集对应形式存储
    • redundant
    • dynamic
    • compressed
  • 相关阅读:
    bat文件转换为exe文件
    桌面快捷方式增(删)
    客户推广微信小程序的几种方法如下
    小程序开发客户对接流程
    Java MySQL 连接
    前端开发构建工具
    [转]chrome 的devtools 中setting 开启workspace , 也有点用处。不是很大
    回归基础的东西,不能只是“感觉会了”
    angular 的ui.router 定义不同的state 对应相同的url
    学习javascript 非常好的博客
  • 原文地址:https://www.cnblogs.com/hangzhi/p/10947974.html
Copyright © 2011-2022 走看看