一、 每行记录在行怎么存储的
mysql 的每行记录都是存储在页里面的,每页的大小是16K。如下图所示:一个页里面有Page header 、Page trailer 、 row offset array 、每行的数据。
row offset array 是每条记录排序用的,当查询的时候,采用二分法进行查询。Page header 、Page trailer 是为了保证数据的完整性。
二、 行的格式有哪些
行的常见格式有
A) COMPACT 普通的
B) COMPRESSED 可压缩的
C) DYNAMIC 动态行格式, 大对象记录优化, 页溢出处理。
聚集索引中的记录包含所有用户定义列的字段。此外,还有一个 6 字节的事务 ID (trx id)字段和一个 7 字节的滚动指针(roll pointer)字段(隐藏的列)。
假如一张表没有建立聚集索引那么,mysql会自动建立一个row id 的主键id.充当聚集索引。
DYNAMIC 与 Compact 处理页溢出数据时有不同:它们不会在记录真实数据处储存真实数据的前 768 个字节,而是把所有的字节都存储到其他页面中,并且只储存其他页面的地址
Compressed 与 Compact 不同的一点是它会采用压缩算法对页面进行压缩,以节省空间