MySQL是一种关系型数据库管理系统(RDBM),数据通常被存储在文件中。这篇文章将讨论MySQL文件中数据的结构。
+--------------+| 文件头 |+--------------+| 数据段 1 |+--------------+| 空闲段 1 |+--------------+| 数据段 2 |+--------------+| 空闲段 2 |+--------------+| ... |+--------------+
MySQL文件包含许多数据段和对应的空闲段。每个数据段包含表或索引的数据,而空闲段则用于存储已删除数据的空间。MySQL使用一个双向链表来管理这些空闲段。
数据段的结构也是关键。下面是数据段的总体结构:
+---------------+| 数据页 |+---------------+| 数据页 |+---------------+| … |+---------------+| 数据页 |+---------------+
每个数据页的大小可以通过系统变量innodb_page_size
进行配置。每个数据页被进一步分成若干行。每行中包含一行数据(一条记录)。
+---------------+| 头信息 |+---------------+| 空闲地 |+---------------+| 记录数据1 |+---------------+| 记录数据2 |+---------------+| … |+---------------+| 记录数据n |+---------------+| Next指针 |+---------------+
每个记录由两个部分组成--头信息和记录数据。头信息包含了该记录的大小、删除标志、版本号等信息。记录数据则是实际的数据。
对于每个数据页,还有一个指向下一页数据页的指针。这个指针的存在意味着MySQL在检索较大的表时可以使用流式检索方式(即按需获取数据)。