前言
本节介绍Mysql中InnoDB引擎中存储数据的基本结构:数据页,来说明数据和索引是如何存储和组织的,了解了数据页的结构,我们就能明白数据如何存储的,如何组织成一颗B+树,也就明白为什么推荐使用自增Id作为主键是插入、读取性能最高的主键方案。
数据页结构
数据页是InnoDB管理存储空间的基本单位,一个页的大小默认是16KB,划分为多个部分,每个部分存储特殊的数据,数据页结构如下:
用户的数据就存放在User Records
部分,Free Space
代表还未使用的空间,Page Directory
是对数据的目录索引,稍后会介绍。可以看到,实际用于存储用户数据的空间大小为16KB-128B = 16256B,其中的真正用于存放数据的空间还要更小一点,不过不用在意这些细节,我们重点关注数据在里面是如何组织的。
数据行是如何存的
我们首先看下一条数据在User Records
中存了哪些信息,这里我们不去讨论各种行记录格式细节,基本大同小异,只关注重点的记录头信息:
记录头信息结构:
我们重点介绍其中的heap_no和next_record字段: