美文网首页
2019-04-17InnoDB记录存储结构

2019-04-17InnoDB记录存储结构

作者: 括儿之家 | 来源:发表于2019-06-17 10:05 被阅读0次

4种不同类型的行格式,分别是Compact、Redundant、Dynamic和Compressed行格式

1 compact

如果表中没有允许存储 NULL 的列,则 NULL值列表 也不存在了,否则将每个允许存储NULL的列对应一个二进制位,二进制位按照列的顺序逆序排列,二进制位表示的意义如下:

二进制位的值为1时,代表该列的值为NULL。

二进制位的值为0时,代表该列的值不为NULL。

因为表record_format_demo有3个值允许为NULL的列,所以这3个列和二进制位的对应关系就是这样:

二进制位按照列的顺序逆序排列,所以第一个列c1和最后一个二进制位对应。

记录的真实数据

对于record_format_demo表来说,记录的真实数据除了c1、c2、c3、c4这几个我们自己定义的列的数据以外,MySQL会为每个记录默认的添加一些列(也称为隐藏列),具体的列如下:

列名是否必须占用空间描述

小贴士: 实际上这几个列的真正名称其实是:DB_ROW_ID、DB_TRX_ID、DB_ROLL_PTR,我们为了美观才写成了row_id、transaction_id和roll_pointer。

页是MySQL中磁盘和内存交互的基本单位,也是MySQL是管理存储空间的基本单位。

指定和修改行格式的语法如下:

CREATE TABLE 表名 (列的信息) ROW_FORMAT=行格式名称

ALTER TABLE 表名 ROW_FORMAT=行格式名称

InnoDB目前定义了4种行格式

COMPACT行格式

具体组成如图:

Redundant行格式

具体组成如图:

Dynamic和Compressed行格式

这两种行格式类似于COMPACT行格式,只不过在处理行溢出数据时有点儿分歧,它们不会在记录的真实数据处存储字符串的前768个字节,而是把所有的字节都存储到其他页面中,只在记录的真实数据处存储其他页面的地址。

另外,Compressed行格式会采用压缩算法对页面进行压缩。

一个页一般是16KB,当记录中的数据太多,当前页放不下的时候,会把多余的数据存储到其他页中,这种现象称为行溢出。

相关文章

  • 2019-04-17InnoDB记录存储结构

    4种不同类型的行格式,分别是Compact、Redundant、Dynamic和Compressed行格式 1 c...

  • InnoDB 记录存储结构

    原文链接 - InnoDB记录存储结构 MySQL服务器上负责对表中数据的读取和写入工作的部分是存储引擎,而服务器...

  • InnoDB 记录存储结构

    InnoDB 将数据划分为若干个页,以页作为磁盘和内存之间交互的基本单位,InnoDB中页大小一般为16KB。 系...

  • MySQL学习笔记-索引提高查询速度

    为什么索引能提高查询速度 MySQL 的基本存储结构 MySQL的基本存储结构是页(记录都存在页里边): 各个数据...

  • 记录十一 线性表的链式存储结构

    前言 在前面记录八 线性表的顺序存储结构和记录九 线性表的顺序存储结构扩展(动态顺序表)中我们了解到线性表的顺序存...

  • myisam和innodb的差异

    mysiam和innodb索引结构的差异 一、myisam的索引和记录是分开存储,数据记录是聚集存储在一块区域,索...

  • 为什么索引能提高查询速度

    MySQL 的基本存储结构 MySQL的基本存储结构是页(记录都存在页里边): 各个数据页可以组成一个双向链表 每...

  • mysql常用的两种引擎

    引擎的介绍 作用:一种用来存储MySQL中对象(记录和索引)的一种特定的结构(文件结构)存储引擎,处于MySQL服...

  • DDIA-数据存储与检索

    # 日志结构存储引擎 使用日志记录数据,仅支持追加形式的记录集合。 # 面向页的存储引擎 # 索引是基于原始数据派...

  • 顺序存储结构和链式存储结构

    顺序存储结构 查找效果高于链式存储结构,但插入、删除效率不如链式存储结构 链式存储结构 查找效率不如顺序存储结构,...

网友评论

      本文标题:2019-04-17InnoDB记录存储结构

      本文链接:https://www.haomeiwen.com/subject/nlqowqtx.html