MySQL中,InnoDB存储引擎使用数据页(或称为页)作为数据和索引的物理存储单位。以下是有关InnoDB数据页的一些关键信息:

  1. 页的大小:默认情况下,InnoDB的页大小为16KB。但是,它可以配置为其他大小,如8KB、4KB等,具体取决于MySQL的编译时配置。
  2. 数据页的类型
    • 索引:存储B-tree索引的节点。
    • 数据页:存储表的行数据。
    • 未压缩的二级索引页:存储非聚集索引的数据。
    • 系统页:存储InnoDB系统信息。
    • 事务日志页:用于存储事务日志。
    • 其他:还有其他类型的页,如回滚段页、插入缓冲位图页等。
  3. 记录的组织:数据页内的记录是按主键值排序的。每个记录都有一个头部,其中包含有关记录的元数据。
  4. 页的结构
    • 文件头部:包含该页的元数据。
    • 记录:数据或索引记录。
    • 插槽数组:帮助定位页中的记录。
    • 文件尾部:包含校验和等信息,用于确保数据页的完整性。
  5. 页的链接:数据页在物理上是独立的,但逻辑上它们是相互链接的。每个数据页都有指向前一个和后一个数据页的指针,这有助于顺序扫描。
  6. 数据页的加载和写入:当需要读取或写入数据时,整个数据页会被加载到内存中,而不仅仅是单个记录。如果页中的某个记录发生更改,整个页都会被标记为“脏”,并最终写回磁盘。

了解数据页的内部结构和工作原理对于优化MySQL性能和故障排查非常有帮助。当理解了数据是如何在磁盘上组织的,就更容易理解查询为什么会快或慢,以及如何有效地调整存储和索引策略。