InnoDB磁盘结构
- 创建InnoDB表
- 要创建InnoDB表,请使用以下CREATE TABLE语句。CREATETABLE t1(a INT, b CHAR(20),PRIMARYKEY(a))ENGINE=InnoDB;如果将ENGINE=InnoDB子句InnoDB定义为默认存储引擎(默认情况下为默认引擎),则无需指定该子句。要检查
- 在外部创建表
- 在InnoDB外部创建表有多种原因。也就是说,在数据目录之外创建表。例如,那些原因可能包括空间管理,I / O优化或将表放置在具有特定性能或容量特性的存储设备上。InnoDB支持以下用于在外部创建表的方法:使用数据目录子句使用CREATE TABLE ... TABLESPACE语法在外部通用表空间
- 导入InnoDB表
- 本节介绍如何使用可传输表空间功能导入表,该功能允许导入表,分区表或每个表文件表空间中的单个表分区。您可能要导入表的原因有很多:在非生产MySQL服务器实例上运行报告,以避免在生产服务器上增加额外的负载。将数据复制到新的从属服务器。从备份的表空间文件中还原表。与导入转储文件相比,移动数据是一种更快的方
- 移动或复制InnoDB表
- 本节介绍了将某些或所有InnoDB表移动或复制到其他服务器或实例的技术。例如,您可以将整个MySQL实例移至更大,速度更快的服务器上。您可以将整个MySQL实例克隆到新的复制从属服务器;您可以将单个表复制到另一个实例以开发和测试应用程序,或复制到数据仓库服务器以生成报告。在Windows上,Inno
- 将表从MyISAM转换为InnoDB
- 如果您具有MyISAM要转换InnoDB为更好的可靠性和可伸缩性的表,请在转换之前参见以下准则和提示。注意MyISAM在早期版本的MySQL中创建的分区表与MySQL 8.0不兼容。此类表必须在升级之前准备,方法是删除分区或将其转换为InnoDB。有关更多信息,请参见“与存储引擎有关的分区限制”。调
- InnoDB中的AUTO_INCREMENT处理
- InnoDB提供了一种可配置的锁定机制,可以显着提高将行添加到带有AUTO_INCREMENT列的表的SQL语句的可伸缩性和性能。要AUTO_INCREMENT对InnoDB表使用该机制,AUTO_INCREMENT必须将列定义为索引的一部分,以便可以等效于对表进行索引查找以获取最大列值。通常,这是
- 聚集索引和二级索引
- 每个InnoDB表都有一个特殊的索引,称为聚簇索引,用于存储行数据。通常,聚簇索引与主键同义。为了从查询,插入和其他数据库操作中获得最佳性能,您必须了解如何InnoDB使用聚簇索引为每个表优化最常见的查找和DML操作。在PRIMARY KEY表上定义a 时,InnoDB将其用作聚簇索引。为您创建的每
- InnoDB索引的物理结构
- 除空间索引外,InnoDB索引是B树数据结构。空间索引使用 R树,R树是用于索引多维数据的专用数据结构。索引记录存储在其B树或R树数据结构的叶页中。索引页的默认大小为16KB。将新记录插入InnoDB聚集索引时,请InnoDB尝试使页面的1/16空闲,以备将来插入和更新索引记录。如果按顺序插入索引记
- 排序索引构建
- InnoDB执行大容量加载,而不是在创建或重建索引时一次插入一个索引记录。这种索引创建方法也称为排序索引构建。空间索引不支持排序索引构建。索引构建分为三个阶段。在第一阶段,将扫描聚簇索引,并生成索引条目并将其添加到排序缓冲区。当排序缓冲区已满时,将对条目进行排序并将其写到临时中间文件中。此过程也称为
- InnoDB FULLTEXT 全文索引
- FULLTEXT索引是在基于文本的列(CHAR,VARCHAR或TEXT列)上创建的,以帮助加快对这些列中包含的数据的查询和DML操作,而忽略定义为停用词的所有单词。甲FULLTEXT指数被定义为一个的一部分CREATE TABLE说明或使用添加到现有的表ALTER TABLE或CREATE IND
- 系统表空间
- 系统表空间是双写缓冲区和更改缓冲区的存储区域。如果在系统表空间中创建表,而不是在每个表文件或常规表空间中创建表,则它也可能包含表和索引数据。在以前的MySQL版本中,系统表空间包含InnoDB数据字典。在MySQL 8.0中,InnoDB将元数据存储在MySQL数据字典中。请参见MySQL数据字典。
- 每表文件表空间
- 每表文件表空间包含单个InnoDB表的数据和索引,并存储在文件系统中自己的数据文件中。每节文件表空间特征在本节的以下主题下描述:每表文件表空间配置每表文件表空间数据文件每表文件表空间的优势每表文件表空间的缺点每表文件表空间配置InnoDB默认情况下,在每个表文件表空间中创建表。此行为由innodb_
- 通用表空间
- 常规表空间是InnoDB使用CREATE TABLESPACE语法创建的共享表空间。本节的以下主题描述了常规表空间功能和特性:常规表空间功能创建通用表空间将表添加到常规表空间常规表空间行格式支持使用ALTER TABLE在表空间之间移动表重命名通用表空间删除通用表空间常规表空间限制常规表空间功能常规
- 撤消表空间
- 撤消表空间包含撤消日志,撤消日志是撤消日志记录的集合,其中包含有关如何通过事务撤消对聚集索引记录的最新更改的信息。撤消日志存在于撤消日志段中,撤消日志段中包含撤消日志段。该innodb_rollback_segments变量定义分配给每个撤消表空间的回滚段数。初始化MySQL实例时,会创建两个默认的
- 临时表空间
- InnoDB使用会话临时表空间和全局临时表空间。会话临时表空间会话临时表空间存储用户创建的临时表和当InnoDB配置为磁盘内部临时表的存储引擎时由优化器创建的内部临时表。从MySQL 8.0.16开始,用于磁盘内部临时表的存储引擎始终为InnoDB。(以前,存储引擎由的值确定internal_tmp
- 在服务器离线时移动表空间文件
- 该innodb_directories选项定义了在启动时要扫描的表空间文件的目录,它支持在服务器脱机时将表空间文件移动或还原到新位置。在启动期间,将使用发现的表空间文件代替数据字典中引用的表空间文件,并更新数据字典以引用重定位的文件。如果扫描发现重复的表空间文件,则启动失败,并显示一条错误,指示为同
- doublewrite缓冲区
- doublewrite缓冲区是系统表空间中的存储区域,在其中InnoDB写入从缓冲池中刷新的页面,然后再将它们写入数据文件中的适当位置。仅在刷新页面并将其写入doublewrite缓冲区之后,才将页面InnoDB写入其正确位置。如果在页面写入过程中发生操作系统,存储子系统或mysqld进程崩溃,则I
- 重做日志
- 重做日志是基于磁盘的数据结构,在崩溃恢复期间用于纠正不完整事务写入的数据。在正常操作期间,重做日志对更改表数据的请求进行编码,这些请求是由SQL语句或低级API调用引起的。在初始化过程中以及接受连接之前,将自动重播在意外关闭之前未完成更新数据文件的修改。有关重做日志在崩溃恢复中的作用的信息,请参见“
- 撤消日志
- 撤消日志是与单个读写事务关联的撤消日志记录的集合。撤消日志记录包含有关如何撤消事务对聚簇索引记录的最新更改的信息。如果另一个事务需要将原始数据视为一致读取操作的一部分,则将从撤消日志记录中检索未修改的数据。撤消日志存在于撤消日志段中,撤消日志段中包含撤消日志段。回滚段位于撤消表空间和全局临时表空间中
本节介绍InnoDB
磁盘上的结构和相关主题。