MySQL中,为优化性能,InnoDB采用页为数据存储的基本单位,每页大小通常为16KB。这种设计类似于缓存,通过减少内存与磁盘的频繁交互,提升数据处理速度。数据页的结构包含Infimum和Supremum,是页中的虚拟记录,用于维护页的单链表。每个记录头信息包含heap_no和record_type,记录真实数据则可能包含DB_ROW_ID、DB_TRX_ID和DB_ROLLPTR等隐藏列。删除标记(delete_mask)用于标记记录是否被删除,而heap_no指示记录在页中的位置。记录间通过next_record链接形成链表,便于数据查找。一行记录的存储受到限制,尤其对于VARCHAR类型,最大存储空间为65535字节。若超出,行会溢出到其他页,通过20字节地址指向剩余数据。MySQL提供了Dynamic和Compressed行格式,处理溢出数据的方式各异,Compressed行格式还进行了压缩。页目录(Page Directory)用于快速定位记录,根据主键将大量记录分组,每个分组有特定的记录数量限制。页头部(Page Header)存储页状态信息,文件头部(File Header)则包含通用页信息。在页尾的File Trailer用于校验页的完整性,防止脏页问题。总体来说,MySQL的InnoDB通过页划分、缓存设计和高效的查找机制,确保了数据操作的高效性和数据的完整性。