MySQL高级_第07章_InnoDB数据存储结构
1.数据库的存储结构:页
索引结构给我们提供了高效的索引万式,不过索引信息以及数据记录都是保存在文件上的,
确切说是存储在页结构中。另一方面,索引是在存储引擎中实现的,MySQL服务器上的存储引擎负责对表中数据的读取和写入工作,不同存储引擎中存放的格式一般是不同的,甚至有的存储引擎比如Memory都不用磁盘来存储数据。
由于InnoDB是MySQL的默认存储引擎,所以本章剖析InnoDB存储引擎的数据存储结构。
1.1磁盘与内存交互基本单位:页
InnoDB将数据划分为若干个页,InnoDB中页的大小默认为16KB。
以页作为磁盘和内存之间交互的基本单位,也就是一次最少从磁盘中读取16KB的内容到内存中,一次最少把内存中的16KB内容刷新到磁盘中。也就是说,在数据库中,不论读一行,还是读多行,都是将这些行所在的页进行加载。也就是说,数据库管理存储空间的基本单位是页(Page),数据库Ⅳ/O操作的最小单位是页。一个页中可以存储多个行记录。
记录是按照行来存储的,但是数据库的读取并不以行为单位,否则一次读取(也就是一次I/o操作)只能处理一行数据,效率会非常低。
1.2页结构概述
页a、页b、页c ..页n这些页可以不在物理结构上相连,只要通过双向链表相关联即可。每个数据页中的记录会按照主键值从小到大的顺序组成一个单向链表,每个数据页都会为存储在它里边的记录生成一个页目录,在通过主键查找某条记录的时候可以在页目录中使用二分法快速定位到对应的槽
然后再遍历该槽对应分组中的记录即可快速找到指定的记录。
1.3页的大小
不同的数据库管理系统(简称DBMS )的页大小不同。比如在MysQL的InnoDB存储引擎中,默认页的大小是16KB,我们可以通过下面的命令来进行查看:
mysql> show variables like ' %innodb_page_size%'
SQL Server中页的大小为8KB,而在Oracle 中我们用术语“块”(Block)来代表“页”,Oralce支持的块大小为2KB,4KB,8KB,16KB,32kB和64KB。
1.4页的上层结构
另外在数据库中,还存在着区(Extent)、段(Segment)和表空间(Tablespace)的概念。行、页、区、段、表空间的关系如下图所示: