技术开发 频道

MYISAM 动态格式数据存储结构

3.小结: 

3.1 如果是一个新行:
 
每行至少分配14个字节+头6个=20个B,如果超过14个B,按实际需要分配.
行数据的格式为:
---------------------------------------------
03           (LEN:1B): start of header - Block type, see mi_dynrec.c, _mi_get_block_info()
00 03 (LEN:2B): actual length (varchar存储的空间为; 实际字符长度+2)
0d     (LEN:1B): 分配给该行的空间中,未使用的字节数
00 fe (LEN:XB): flags (0 表示不为空,1表示为空) (这里是一个字节还是两个字节,根据.FRM定义取得)
 
--数据部分:
--第一个字段:
01     (LEN:XB): 如果是变长类型,在每个字段数据开始前会有1-N个字段来表明该字段数据的实际长度,
                 如果是固定长度类型的数据,则没有这个标识.
DATA   (LEN:XB): 实际存储的值: 'a',长度根据第二个标识定.
--第二个字段:
...
--第三个字段:
...
00     (LEN:XB): 未使用的空间(长度根据第三个标识定)
---------------------------------------------
 
 
3.2 如果是一个被更新过并且产生了链接的行:
 
3.2.1 行数据的格式为:
--------------------------------------------------------
05           (LEN:1B): 只要发生行链接type就会变成05
00 16 (LEN:1B): 实际字符长度 = 20+2= 22
00     (LEN:1B): 未使用的空间: 0 B
07 00 00 00 00 00 00 00 3c (LEN:9B):   行数据的链接地址
fe     (LEN:XB): flags (0 表示不为null,1表示为null)
 
-- 数据部分:
--第一个字段:
14     (LEN:XB): 如果是变长类型,在每个字段数据开始前会有1-N个字段来表明该字段数据的实际长度,
                 如果是固定长度类型的数据,则没有这个标识.
DATA   (LEN:XB): 实际存储的值: 'a',长度根据第二个标识定.
--第二个字段:
...
---------------------------------------------------------
 
3.2.2 并且,链接部分的数据格式为:
--------------------------------------------------------
09           : 类型: 代表这是链接数据
00 16 : 该段实际字符长度
02     : 分配给链接行的空间中,未使用的空间: 2 B
-- 数据部分:
第一个字段:
14     (LEN:XB): 如果是变长类型,在每个字段数据开始前会有1-N个字段来表明该字段数据的实际长度,
                 如果是固定长度类型的数据,则没有这个标识.
DATA   (LEN:XB): 实际存储的值: 'a',长度根据第二个标识定.
第二个字段:
...
00     : 未使用的空间
XXX    : 下一行
---------------------------------------------------------
 
3.3 被删除的行:
如果该行被删除了,那么该行的TYPE=00,然后数据部分都会被置为FF;
0
相关文章