面试题答案
一键面试数据页布局
- DYNAMIC行格式
- 数据页头部:包含一些通用信息,如页号、页类型等。与其他行格式类似,数据页头用于管理整个数据页的基本信息。
- 记录部分:记录按照一定顺序存储在数据页中。变长字段长度列表紧跟在记录头之后,用于记录每个变长字段的长度。对于长数据类型(如TEXT、BLOB),大于页内可容纳的部分会存储在溢出页中,数据页内只存储一个20字节的指针指向溢出页。
- 空闲空间:数据页中未被记录占用的空间,用于新记录插入或已有记录扩展。
- COMPRESSED行格式
- 数据页头部:同样包含基本的页管理信息,但为了支持压缩,可能会额外记录一些与压缩相关的元数据,例如压缩算法标识等。
- 记录部分:整体结构与DYNAMIC类似,但记录在存储前会经过压缩处理。由于压缩后数据长度变化较大,可能对变长字段长度列表的管理方式有一些特殊之处,以适应压缩后的数据长度。对于长数据类型,同样可能存在溢出页的情况,但因压缩后数据量可能减少,溢出页的使用频率或许会有所不同。
- 空闲空间:与DYNAMIC相比,由于记录被压缩,空闲空间的利用效率可能更高。因为压缩后记录占用空间变小,在相同数据量下,COMPRESSED行格式的数据页可能有更多连续的空闲空间,这对于新记录插入或已有记录扩展在空间利用上更具优势。
记录存储方式
- DYNAMIC行格式
- 记录头:固定长度,包含记录的一些状态信息,如是否为删除标记、记录的位置信息等。
- 变长字段长度列表:按照字段在表结构中定义的顺序,依次记录每个变长字段的长度。
- 实际数据:按照表结构中字段的顺序存储实际数据值。对于变长字段,其实际存储长度由变长字段长度列表确定。
- 溢出数据:对于TEXT、BLOB等大字段,如果数据量超过数据页可容纳的范围,会将部分数据存储到溢出页。数据页内存储的指针指向溢出页,溢出页采用链表结构进行管理。
- COMPRESSED行格式
- 记录头:与DYNAMIC类似,但可能会增加一些与压缩相关的标志位,用于标识记录是否已压缩、压缩算法等信息。
- 变长字段长度列表:需要适应压缩后的数据长度记录,可能在记录方式上与DYNAMIC有所不同,以准确反映压缩后变长字段的长度。
- 实际数据:实际数据在存储前经过压缩处理,以减少存储空间占用。解压操作在读取记录时进行。
- 溢出数据:同样可能存在溢出页情况,但由于压缩减少了数据量,溢出页的使用情况可能与DYNAMIC不同。压缩后的数据在溢出页的存储结构也可能因压缩特性而有所变化,比如可能对溢出页内的数据进一步压缩处理以提高空间利用率。