InnoDB存储引擎的逻辑存储结构和Oracle大致相同,所有数据都被逻辑地存放在一个空间中,我们称之为表空间(tablespace)。表空间又由段(segment)、区(extent)、页(page)组成。页在一些文档中有时也称为块(block),1 extent = 64 pages,InnoDB存储引擎的逻辑存储结构大致如图所示。
段
上图中显示了表空间是由各个段组成的,常见的段有数据段、索引段、回滚段
等。InnoDB存储引擎表是索引组织的(index organized),因此数据即索引,索引即数据
。那么数据段即为B+树的页节点(上图的leaf node segment
),索引段即为B+树的非索引节点(上图的non-leaf node segment
)。
需要注意的是,并不是每个对象都有段。因此更准确地说,表空间是由分散的页和段组成
。
区
区是由64个连续的页组成的,每个页大小为16KB,即每个区的大小为1MB。对于大的数据段,InnoDB存储引擎最多每次可以申请4个区,以此来保证数据的顺序性能。
页
同大多数数据库一样,InnoDB有页(page)的概念(也可以称为块),页是InnoDB磁盘管理的最小单位。与Oracle类似的是,Microsoft SQL Server数据库默认每页大小为8KB,不同于InnoDB页的大小(16KB),且不可以更改(也许通过更改源码可以)。
行
InnoDB存储引擎是面向行的(row-oriented),也就是说数据的存放按行进行存放。