zoukankan      html  css  js  c++  java
  • mysql-innodb-行格式

    innodb行格式

    1. 以写入操作为例,mysql是在内存中处理数据 然后写入磁盘的,每次写入磁盘的数据大小为16kb,也就是一页的容量大小

    2. innodb行格式分四种

      1. compact

       变长字段长度列表 倒叙存储着变长列的数据真实长度,如果没有变长列则没有这些值

    col1 col2 cpl3
    aaaa bbb d

    以上表为例,变长字段存储的的数据为 010304

     NULL值列 使用二进制位倒叙存储着为null的列,null值列使用整字节数存储,不满1个byte的以1一个byte存储

    col1 col2 col3
    null null aa

      以上表为例,NULL值列存储的数据是00000011

    记录头信息 记录很多信息比如:记录是否删除,记录的类型0:普通记录 1:B+树非叶子节点记录 2:最小记录 3:最大记录... 这里先不赘述暂时用不到

    innodb默认会为每一条记录多生成一些隐藏列,DB_TRX_ID(事务id) DB_ROLL_PTR(回滚指针) DB_ROW_ID(行记录 起到主键的作用)

    DB_ROW_ID如果表没有自定义主键,没有unique索引的情况下会生成一个隐藏主键

    2. Redundant

      

       跟compact不同的是 redundant第一个存储的是所有列的长度,并且是以偏移量的方式记载

    varchar最大字符数 以ASCII码为例 65535-2个字节的真实数据长度 - 1个字节的null值标识 /1 = 65533个字节可以用于存储字符

    行溢出:当某个列中存储的数据占用的字节非常多时该列就可能成为溢出列

    对于compact和reduntant行格式来说,如果一个列中存储的数据比较多,会存储前768个字节的数据 和一个指向其他页的地址

    3.Dynamic

      5.7版本的mysql跟compact不同的是,行溢出的时候 真实数据处不存储真实数据,只存储其他页的地址

    4.Comressed

      会采用压缩算法对页面进行压缩

      

  • 相关阅读:
    Maven 集成Tomcat插件
    dubbo 序列化 问题 属性值 丢失 ArrayList 解决
    docker 中安装 FastDFS 总结
    docker 从容器中拷文件到宿主机器中
    db2 相关命令
    Webphere WAS 启动
    CKEDITOR 4.6.X 版本 插件 弹出对话框 Dialog中 表格 Table 自定义样式Style 问题
    SpringMVC JSONP JSON支持
    CKEDITOR 3.4.2中 按钮事件中 动态改变图标和title 获取按钮
    git回退到远程某个版本
  • 原文地址:https://www.cnblogs.com/isnotnull/p/14330118.html
Copyright © 2011-2022 走看看