加入收藏 | 设为首页 | 会员中心 | 我要投稿 PHP编程网 - 黄冈站长网 (http://www.0713zz.com/)- 数据应用、建站、人体识别、智能机器人、语音技术!
当前位置: 首页 > 运营中心 > 搜索优化 > 正文

InnoDB行存储格式是哪些

发布时间:2022-02-12 06:39:34 所属栏目:搜索优化 来源:互联网
导读:这篇文章主要讲解了InnoDB行存储格式是什么,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习InnoDB行存储格式是什么吧! 在早期的InnoDB版本中,由于文件格式只有一种,因此不需要为此文件格式命名。随着In
        这篇文章主要讲解了“InnoDB行存储格式是什么”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“InnoDB行存储格式是什么”吧!
 
        在早期的InnoDB版本中,由于文件格式只有一种,因此不需要为此文件格式命名。随着InnoDB引擎的发展,开发出了不兼容早期版本的新文件格式,用于支持新的功能。今天我们就来介绍一下InnoDB行存储格式。
 
InnoDB存储引擎支持四名的格式:REDUNDANT,COMPACT, DYNAMIC,和COMPRESSED。
 
InnoDB行格式概述
 
REDUNDANT 行格式
 
REDUNDANT格式提供与旧版MySQL的兼容性。
 
REDUNDANT行的格式是由两个支持 InnoDB的文件格式(Antelope和Barracuda)。
 
使用REDUNDANT行格式的表将可变长度列值(VARCHAR, VARBINARY和, BLOB和 TEXT类型)的前768个字节存储在B树节点内的索引记录中,其余部分存储在溢出页面上。大于或等于768字节的固定长度列被编码为可变长度列,可以在页外存储。例如,CHAR(255)如果字符集的最大字节长度大于3,则列可以超过768字节utf8mb4。
 
如果列的值为768字节或更少,则不使用溢出页,并且可能导致I / O的一些节省,因为该值完全存储在B树节点中。这适用于相对较短的BLOB列值,但可能导致B树节点填充数据而不是键值,从而降低其效率。具有许多BLOB列的表可能导致B树节点变得太满,并且包含的行太少,使得整个索引的效率低于行较短或列值存储在页外的情况。
 
REDUNDANT 行格式存储特性
 
REDUNDANT行格式有如下存储特性:
 
每个索引记录包含一个6字节的标头。标头用于将连续记录链接在一起,以及用于行级锁定。
聚簇索引中的记录包含所有用户定义列的字段。此外,还有一个6字节的事务ID字段和一个7字节的滚动指针字段。
如果没有为表定义主键,则每个聚簇索引记录还包含一个6字节的行ID字段。
每个辅助索引记录包含为聚簇索引键定义的所有主键列,这些列不在辅助索引中。
记录包含指向记录的每个字段的指针。如果记录中字段的总长度小于128字节,则指针是一个字节; 否则,两个字节。指针数组称为记录目录。指针指向的区域是记录的数据部分。
在内部,固定长度的字符列,例如 CHAR(10)以固定长度格式存储。尾随空格不会从VARCHAR列中截断 。大于或等于768字节的固定长度列被编码为可变长度列,可以在页外存储。例如,CHAR(255)如果字符集的最大字节长度大于3,则列可以超过768字节 utf8mb4。
SQL NULL值在记录目录中保留一个或两个字节。NULL如果存储在可变长度列中,则SQL 值将在记录的数据部分中保留零个字节。对于固定长度的列,列的固定长度保留在记录的数据部分中。为NULL 值保留固定空间允许将列从NULL非NULL值更新 到非值,而不会导致索引页碎片。

(编辑:PHP编程网 - 黄冈站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读