面试题答案
一键面试数据页主要组成部分及作用
- 文件头部(File Header)
- 作用:记录页的通用信息,如页号、上一页和下一页的页号等。这些信息用于将各个数据页组成双向链表,方便数据的顺序访问和定位。例如,通过上一页和下一页页号,InnoDB 存储引擎能高效地遍历数据页链表,快速找到所需的数据页。
- 页头部(Page Header)
- 作用:存储本页的状态信息,包括页中记录的数量、已删除记录的数量、页中可用空间大小等。这些信息有助于管理页内数据的存储和组织,如判断页是否已满,以及进行插入、删除操作时对页空间的调整。
- 最大最小记录(Infimum + Supremum Records)
- 作用:这两个伪记录用于限定页内记录的范围。Infimum 记录表示页内最小记录,Supremum 记录表示页内最大记录。它们确保了页内记录的有序性,在进行数据查找、排序等操作时提供边界条件。
- 用户记录(User Records)
- 作用:实际存储用户插入到表中的数据记录。这些记录按照一定的格式进行存储,每个记录包含了表中各个列的数据值。
- 空闲空间(Free Space)
- 作用:用于存储新插入的记录。当有新记录插入时,InnoDB 会在空闲空间中寻找合适的位置来存储,若空闲空间不足,则可能触发页分裂等操作。
- 页目录(Page Directory)
- 作用:页目录是一个稀疏索引,它将页内的记录分成若干组,并记录每组最后一条记录的位置。通过页目录,InnoDB 可以快速定位到目标记录所在的组,然后在组内进行二分查找,从而大大提高数据查找效率。
- 文件尾部(File Trailer)
- 作用:主要用于验证页的完整性。它包含一个校验和(checksum)字段,在读取页时,通过重新计算校验和并与文件尾部的校验和对比,来判断页在存储或传输过程中是否发生损坏。