深入学习MySQL,了解InnoDB的逻辑存储结构

文 / @WordPress主题

深入学习MySQL,了解InnoDB的逻辑存储结构

在MySQL中,创建的表以及对应的索引数据都会存储在一个扩展名为.ibd的文件中。这个文件的路径可以通过查看MySQL变量datadir来得到,然后进入对应的数据库名目录即可看到很多.ibd文件,其中文件名就是相应的表名。

对于表空间,MySQL中有两种类型,共享表空间(或者叫系统表空间)和独立表空间文件。在共享表空间中,所有的表数据和相应的索引都会存放在一个文件中,而对于独立表空间,每个表的数据和索引都存放在一个单独的.ibd文件中。目前的MySQL版本默认使用独立表空间。

可以通过innodb_file_per_table参数来切换独立表空间和系统表空间,在启用该参数后,每张表内的数据都会单独存放在一个表空间文件中。但需要注意的是,每个表的表空间只会存储数据、索引,其他例如回滚信息、系统事务信息、二次写缓冲等数据仍然存储在原始的共享表空间中。

表空间由段(segment)、区(extent)、页(page)组成。其中,段表空间是由段组成的逻辑结构,用于管理物理文件。常见的段有数据段、索引段、回滚段等,每个段由N个区和32个零散的页组成。InnoDB存储引擎表是索引组织的,因此数据就是索引,索引就是数据。一般情况下,创建一个索引的同时也会创建两个段,分别为非叶子节点段和叶子节点段。

区是由连续的页组成的空间,每个区的大小都是1MB,为了保证区域内页面的连续性,InnoDB存储引擎一次从磁盘申请4-5个区域。默认情况下,InnoDB存储引擎的页面大小为16KB,也就是有64个连续页面,16*64=1024=1MB。InnoDB 1.2.x版本增加了innodb_page_size参数,可以通过该参数设置默认页面大小为4K、8K等。

页是InnoDB存储引擎磁盘管理的最小单位,默认为16KB,可以通过参数innodb_page_size设置页大小为4K、8K、16K。InnoDB为了实现不同的目的而设计了很多种页,常见的页面类型有数据页面、undo页面、系统页面、事物数据页面、插入缓冲位图页、插入缓冲区、空闲列表页、未压缩的二进制大对象页面、压缩二进制大对象页面等。

行是InnoDB存储引擎的存储单位,数据按照行存储。每个页存放的行记录也是有硬性定义的,最多允许存放16KB/2-200行,也就是7992行。InnoDB存储引擎有两种文件格式,一种叫Antelops,另一种叫Barracuda。在Antelope文件格式下,有compact和redundant两种行记录格式;在Barracuda文件格式下,有compressed和dynamic两种行记录格式。

以上就是InnoDB的逻辑存储结构的详细介绍。对于MySQL的使用和优化,深入了解其内部实现是很有必要的,也可以通过视频教程等方式深入学习。

添加UTHEME为好友
扫码添加UTHEME微信为好友
· 分享WordPress相关技术文章,主题上新与优惠动态早知道。
· 微信端最大WordPress社群,限时免费入群。