行格式-变长字段长度列表Question

MySQL 怎么知道 varchar(n) 实际占用数据的大小?

MySQL 的 Compact 行格式中会用变长字段长度列表存储变长字段实际占用的数据大小。

为什么变长字段长度列表的信息要按照逆序存放?

因为记录头信息中指向下一个记录的指针,指向的是下一条记录的记录头信息和真实数据之间的位置,这样的好处是向左读就是记录头信息,向右读就是真实数据,比较方便。

变长字段长度列表中的信息之所以要逆序存放,是因为这样可以使得位置靠前的记录的真实数据和数据对应的字段长度信息可以同时在一个 CPU Cache Line 中,这样就可以提高 CPU Cache 的命中率。

每个数据库表的行格式都有变长字段字节数列表吗?

变长字段字节数列表不是必须的,变长字段长度列表只出现在数据表有变长字段的时候。

参考

行格式-变长字段长度列表