innodb 读书笔记 -- 表

2020-05-08  本文已影响0人  小小小超子

索引组织表

聚集索引, 隐式row_id

表逻辑结构:表空间-段-区-页-行

table_space.png

行结构

compact 格式

line_compact.png
变长字段长度
null 标志位
记录头

reduntant 格式

行溢出数据

*   不定长数据到底如何存储?前面说过,下一条数据偏移量占2字节,也就是说,当前数据长度最多 25535 字节,varchar 最大也是 25535,那么一条记录能存下一条 25535 的 varchar 吗?

如图:

![create_table_varchar.png](https://img.haomeiwen.com/i4642106/2d56674f5fae9794.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

换个编码:

create_table_utf8.png

从图中可以看出,varchar 的限制单位是字节,而不是一个字,utf8 通常按3个字节表示,所以图中最大是 21845。实测中发现有的SQL工具可以执行成功以上的创建命令,但是检查表信息,发现把字段 a 标记成了 text 类型。

当行数据大小超过 25535 时,会发生行溢出。行溢出时,数据存放在页类型为Uncompress BLOB页中

line_overflow.png

char 和 varchar

通常认为 char 是定长的,varchar 是变长的。但是有些细节还是要注意

页结构

page_struct.png virtual_records.png
上一篇 下一篇

猜你喜欢

热点阅读