前言
InnoDB是一个将表中的数据存储到磁盘上的存储引擎,所以即使关机后我们的数据也不会丢失,而真正处理数据的过程是发生在内存中,所以需要把磁盘中的数据加载到内存中,而我们知道磁盘的读写速度非常慢,和内存读写差了几个数量级,所以InnoDB存储引擎是如何将数据从磁盘中读出来的?本文先了解一下InnodDB的逻辑存储结构的概念以及之间的关系,为后续的学习打好基础。希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教。
InnoDB存储结构
InnoDB所有的数据都被逻辑地存放在一个空间中,称之为表空间。而表空间由段(segment)、区(extent)、页(page)组成,如下所示:
这些组成部分的包含关系如下:
行(row)
我们平时是以记录为单位向表中插入数据的。这些记录在磁盘上的存放方式被称为行格式或者记录格式。InnoDB提供了4种行格式供我们选择,分别是Compact、Redundant、Dynamic和Compressed行格式。
页(page)
数据库管理存储空间的基本单位是页(Page),InnoDB将数据划分为若干个页,页是InnoDB存储引擎磁盘管理的最小单位,InnoDB中页的大小默认为 16KB;
一个页中可以存储多个行记录,数据库以页作为磁盘和内存之间交互的基本单位,在数据库中,不论读一行,还是读多行,都是将这些行所在的页进行加载,也就是一次最少从磁盘中读取16KB的内容到内存中,否则一次读取(也就是一次I/O操作)只能处理一行数据,效率会非常低。
区(extend)
比页大一级的存储结构,区是由连续页组成的空间,在任何情况下每个区的大小都为1MB。为了保证区中页的连续性,InonoDB存储引擎一次从磁盘申请4-5个区。在默认情况下,InnoDB存储引擎的页的大小为16KB,即一个区中应有64个连续的页。
段(Segment)
段是数据库中的分配单位,由一个或多个区组成,段不要求区与区之间是相邻,不同类型的数据库对象以不同的段形式存在,常见的段有数据段、索引段、回滚段等。
表空间(Tablespace)
表空间可以看做是InnoDB存储引擎逻辑结构的最高层,所有的数据都存放在表空间中。 数据库由一个或多个表空间组成,表空间是由各个段组成的,在一个表空间中可以有一个或多个段,但是一个段只能属于一个表空间,表空间从管理上可以划分为:系统表空间、用户表空间、撤销表空间、临时表空间等。
小结
InnoDB所有的数据都被逻辑地存放在一个空间中,称之为表空间。而表空间由段(segment)、区(extent)、页(page)组成。