一、存储引擎简介
存储引擎就是存储数据、建立索引、更新/查询数据等技术的实现方式。存储引擎是基于表的,而不是基于库的,所以存储引擎也可被称为表类型。
MySQL默认的存储引擎是InnoDB。
--查询建表语句
show create table 表名;
--建表时指定存储引擎
CREATE TABLE 表名(
...
) ENGINE=INNODB;
-- 查看当前数据库支持的存储引擎
show engines;
二、默认存储引擎InnoDB引擎
InnoDB 是一种兼顾高可靠性和高性能的通用存储引擎,在 MySQL 5.5 之后,InnoDB 是默认的 MySQL 引擎。
特点:
- DML 操作遵循 ACID 模型,支持事务
- 行级锁,提高并发访问性能
- 支持外键约束,保证数据的完整性和正确性
文件:
- xxx.ibd: xxx代表表名,InnoDB 引擎的每张表都会对应这样一个表空间文件,存储该表的表结构(frm、sdi)、数据和索引。
参数:innodb_file_per_table,决定多张表共享一个表空间还是每张表对应一个表空间
innodb_file_per_table
是一个 MySQL 配置参数,用于指定 InnoDB 存储引擎是否为每个表单独创建一个独立的数据文件。
当 innodb_file_per_table
参数设置为 ON
时,每个创建的表都会有一个对应的独立数据文件,该文件存储与该表相关的数据。这意味着每个表的数据可以被独立管理和操作,也可以独立进行备份和恢复操作。这种模式下,InnoDB 表空间被分割成多个文件。
当 innodb_file_per_table
参数设置为 OFF
(默认值)时,所有的 InnoDB 表将使用共享的系统表空间,即一个大的共享数据文件(如 ibdata1)。在这种模式下,所有的表共享同一个数据文件,因此表之间的数据并没有明确的物理隔离,可能会导致一些管理和维护上的挑战。
知识点:
查看 Mysql 变量: show variables like 'innodb_file_per_table';
从idb文件提取表结构数据:
(在cmd运行) ibd2sdi xxx.ibd
InnoDB 逻辑存储结构:
InnoDB 是一种流行的存储引擎,用于 MySQL 关系型数据库管理系统。它具有以下几个主要的逻辑存储结构:
-
表空间(Tablespace):
- 共享表空间(Shared Tablespace):默认情况下,所有的 InnoDB 表共享一个共享表空间文件(通常是 ibdata1)。这个文件包含了所有表的数据和索引。
- 独立表空间(Individual Tablespace):如果启用了
innodb_file_per_table
参数,每个表将拥有自己独立的表空间文件。这些文件位于数据目录中,以表名为基础命名。
-
段(Segment):
- 数据段(Data Segment):存储表的数据。每个表在共享表空间中都有一个对应的数据段。
- 索引段(Index Segment):存储表的索引。每个表在共享表空间中也有一个对应的索引段。
-
区(Extent):
- 区是磁盘上分配的连续存储区域。一个区通常包含多个页。
- 页(Page)是 InnoDB 存储引擎的最小单位。每个页默认大小为16KB,包含一部分数据或索引。
-
行(Row):
- InnoDB 存储引擎使用 B+ 树索引结构来组织数据和索引。每个 B+ 树节点中的行存储实际的表数据。
值得注意的是,InnoDB 存储引擎还有其他一些辅助的逻辑结构,如回滚段(Rollback Segment)、撤销日志(Undo Log)等,用于支持事务的 ACID 特性。但这些结构不属于 InnoDB 的主要逻辑存储结构。
这些逻辑存储结构共同工作,使得 InnoDB 存储引擎能够高效地管理和访问数据库表的数据和索引,并提供高性能和可靠的事务处理能力。