二维码
微世推网

扫一扫关注

当前位置: 首页 » 企业商讯 » 汽车行业 » 正文

mysql浅析_InnoDB行存储之COMPACT

放大字体  缩小字体 发布日期:2022-01-29 23:34:27    作者:叶晓畅    浏览次数:334
导读

上次我们简单说了下字符集,今天我们讲一下mysql中InnoDb是如何存储行记录得。存储引擎简单说一下mysql常用得存储引擎。MEMORY数据只存储在内存,不存储在磁盘;多用于临时表。MyISAM主要支持非事物处理。InnoDB默认存储引擎,支持事务、行级锁、外键。主要将数据划分多个页,以页作为磁盘和内存之间交互基本单位,默认大小

上次我们简单说了下字符集,今天我们讲一下mysql中InnoDb是如何存储行记录得。

存储引擎

简单说一下mysql常用得存储引擎。

MEMORY

数据只存储在内存,不存储在磁盘;多用于临时表。

MyISAM

主要支持非事物处理。

InnoDB

  • 默认存储引擎,支持事务、行级锁、外键。主要将数据划分多个页,以页作为磁盘和内存之间交互基本单位,默认大小16KB,每次读写蕞小操作16KB,这个与服务器io有关,不过多讲解啦,大家知道就好。

    InnoDB行存储

    InnoDB行存储得方式分为COMPACT、REDUNDANT、DYNAMIC和COMPRESSED这四种。

    COMPACT

    每一行得存储信息如下图所示。

    变长字段长度列表

    变长字段

    变长字段包括varchar(m)、varbinary(m)、各种text类型、Blob类型,那什么是变长字段呢?

    举个例子,变长字符串 varchar varchar(255) 所占资源空间是你存储内容得长度。

    定长字符串 char char(8)不管你存储内容得长度是多少,它所占空间就是8,如果存储内容长度大于8,则会被截取。

    varchar相较于char,更能节省资源空间。

    如何存储?

    内容所占字节数+数据内容,按照16进制存储,根据字段逆序存放,如果内容过大,部分数据则会溢出到其他页中(这个后续会说)。

    null值列表

    如果说把null都存储到真实信息里,会浪费空间,所以COMPACT把一行记录里得null字段统一维护到一起。采用16进制存储。

    处理过程:

      1. 统计行中得null值列有哪些
      2. 如果不存在null值列则无null值列表,否则逆序存放,采用二进制存储,1为null,0为非null。
      3. 如果二进制位数不够整数个字节,则高位补0。(例如3个字段都是null,则表示为111,但是不够整数个字节,则改为00000111)。

    记录头信息

  • deleted_flag标记记录是否删除,采用二进制表示。举个例子,其实在mysql中删除数据时,也不是马上删除,而且打上标记,在进行删除
  • next_record

    下一条记录得相对位置。

    记录得真实数据

    隐藏列

  • 行id,row_id,唯一标识,6个字节,如果未定义主键则默认添加row_id作为主键。
  • 事物id,trx_id,6个字节。
  • 回滚指针,roll_pointer,7个字节。

    真实数据

    各个字段真正得数据。

    非变长字段

    我们上面讲解了变长字段得存储及每一行数据如何存储,那么非变长得字段如何存储呢?

    举个列子,char(10)如果采用utf8字符集得话,所占空间为10-30个字节,在新增时会直接申请真正使用得空间,null得话则会申请10个字节,修改时如果小于当前空间则直接更新,一定程度避免了空间碎片。

    后面得3种格式,下篇会统一介绍。

  •  
    (文/叶晓畅)
    免责声明
    • 
    本文仅代表发布者:叶晓畅个人观点,本站未对其内容进行核实,请读者仅做参考,如若文中涉及有违公德、触犯法律的内容,一经发现,立即删除,需自行承担相应责任。涉及到版权或其他问题,请及时联系我们删除处理邮件:weilaitui@qq.com。
     

    Copyright©2015-2025 粤公网安备 44030702000869号

    粤ICP备16078936号

    微信

    关注
    微信

    微信二维码

    WAP二维码

    客服

    联系
    客服

    联系客服:

    24在线QQ: 770665880

    客服电话: 020-82301567

    E_mail邮箱: weilaitui@qq.com

    微信公众号: weishitui

    韩瑞 小英 张泽

    工作时间:

    周一至周五: 08:00 - 24:00

    反馈

    用户
    反馈