美文网首页
InnoDB 行记录格式

InnoDB 行记录格式

作者: asdf____ | 来源:发表于2020-04-24 00:08 被阅读0次

    InnoDB 存储引擎提供了 compact (5.1 后的默认格式) 和 redundant 两个格式来存放行记录数据,redundant 格式是为了兼容之前的版本而保留。
    这里主要介绍下 compact 行记录格式。

    compact 行记录的格式*.png
    • 变长字段长度列表**:如果列的长度小于 255 字节,用 1 字节表示;如果大于 255 个字节,用 2 字节表示
    • NULL标志位**:表明该行数据是否有NULL值。占一个字节。
    • 记录头信息**:固定占用 5 字节,每位的含义如下:
    名称 大小(bit) 描述
    () 1 未知
    () 1 未知
    delete_flag 1 该行是否已被删除
    min_rec_flag 1 为1,如果该记录是预先被定义为最小的记录
    n_owned 4 该记录拥有的记录数
    heap_no 13 索引堆中该记录的排序记录
    record_type 3 记录类型,000表示普通,001表示B+树节点指针,010表示infimum,011表示supermum,1xx表示保留
    next_record 16 页中下一条记录的相对位置

    在每个行记录中,还有两个隐藏列,事务 ID 和回滚指针,分别为 6 字节和 7 字节。若 InoDB 表没有定义主键,也没有不包含 NULL 的唯一索引,每行还会增加一个 6 字节的 ROW_ID 列作为主键。

    InnoDB 聚簇索引 B+ 树叶结点 compact 格式行记录.png InnoDB 二级索引 B+ 树叶结点 compact 格式行记录.png

    可以看到,二级索引记录是没有事务 ID 和回滚指针的。

    纠正认知误区:InnoDB 不管是聚簇还是二级索引的 B+ 树叶结点,存储的都是一个 compact 格式的行记录,其中同时包含了以往认知中的索引关键字的值与数据记录的值。

    参考:https://blog.jcole.us/2013/01/10/the-physical-structure-of-records-in-innodb

    相关文章

      网友评论

          本文标题:InnoDB 行记录格式

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