2

在 MySQL 5.6 中,我遇到了以下问题:

对于在 ROW_FORMAT=DYNAMIC 或 ROW_FORMAT=COMPRESSED 中创建的表,BLOB、TEXT 或 VARCHAR 列的值可能完全在页外存储,具体取决于它们的长度和整行的长度。对于页外存储的列,聚集索引记录仅包含指向溢出页的 20 字节指针,每列一个。

为什么外部存储的 blob 需要 20 字节的指针?我认为地址空间不会那么大。

4

1 回答 1

5

行内存储的数据在此处定义:

https://github.com/jeremycole/mysql/blob/master/storage/innobase/include/btr0cur.h#L762

它写在这里:

https://github.com/jeremycole/mysql/blob/master/storage/innobase/btr/btr0cur.c#L4504

所以写入的字段是(总共 20 个字节):

  • 空间 ID(4 个字节):有点多余。
  • 页码(4 个字节):真正重要的部分。
  • 页面偏移量(4 字节):写入页面内的小标题的偏移量,也有点多余,因为整个页面都被占用了。
  • 数据长度(8 字节):外部写入数据的总长度。
于 2013-05-30T20:44:20.363 回答