一、基本概念
1.1、数据库 (Database)
数据库是一个保存有组织数据的容器,MySQL 数据库中,所有的表、视图、存储过程和函数等对象都归属于一个特定的数据库。
1.2、表 (Table)
表是 MySQL 中存储数据的基本单位。表由行和列组成,每一行代表一条记录,而每一列代表某种特定类型的数据。MySQL 支持多种存储引擎,如 InnoDB、MyISAM 等,InnoDB 是默认的存储引擎,提供了事务支持和外键约束。
1.3、记录 (Record)
表中的每一行数据称为一条记录。记录由多个字段组成,每个字段对应于表中的一列。
1.4、*事务 (Transaction)*
事务是 MySQL 中的一个重要概念,用于确保一组 SQL 操作要么全部成功,要么全部失败。事务必须满足四个特性,即原子性 (Atomicity)、一致性 (Consistency)、隔离性 (Isolation) 和持久性 (Durability),简称为 ACID 特性。InnoDB 引擎完全支持事务。
1.5、*索引 (Index)*
索引是为了加速查询而建立的数据结构。MySQL 中常见的索引类型有 B+ 树索引、哈希索引和全文索引等。索引虽然可以提高查询效率,但会占用额外的存储空间,并在数据插入或更新时增加一定的开销。
二、物理数据结构
MySQL 中的数据是如何存储在磁盘上的,这是数据库物理层设计的核心部分。理解 MySQL 的物理数据结构有助于优化查询性能和管理存储空间。
2.1、*文件存储结构*
MySQL 物理层主要涉及存储引擎和文件存储方式。以 InnoDB 引擎为例,常见的物理文件包括:
- 数据文件 (Data File): MySQL 数据库的数据存储在数据文件中,InnoDB 的数据文件后缀通常为
.ibd
,每个.ibd
文件存储一个表的数据和索引。 - 日志文件 (Log File): InnoDB 使用重做日志文件 (
ib_logfile
) 来记录事务操作,确保在系统崩溃后数据的一致性。MySQL 中引入了诸多日志管理的优化,比如支持更大容量的日志文件和并行日志写入。 - 表空间文件 (Tablespace File): MySQL 将数据存储在表空间中,表空间由多个文件组成,InnoDB 提供了共享表空间和独立表空间两种方式。共享表空间是多个表共享一个表空间文件,而独立表空间则为每个表创建独立的表空间文件。
2.2、*页 (Page)*
页是 InnoDB 中的最小存储单元。InnoDB 以页为单位进行数据读写,默认页大小为 16KB。常见的页类型有:
- 数据页 (Data Page): 存储表的实际行数据。
- 索引页 (Index Page): 存储索引信息。
- Undo 页 (Undo Page): 用于存储事务的撤销信息,以支持事务的回滚。
页是 InnoDB 管理磁盘数据的基本单元,MySQL 在读取数据时,往往是以页为单位批量读取,从而减少磁盘 I/O 次数,提高性能。
2.3、*行 (Row)*
InnoDB 表中数据的最小存储单位是行,行由多个列组成。MySQL 中引入了对行存储的优化,支持更高效的行格式 (如 COMPACT、REDUNDANT 和 DYNAMIC 格式),以减少存储空间的使用。
2.4、*B+ 树索引结构*
MySQL 采用 B+ 树作为索引结构,B+ 树是一种平衡的树结构,能够保持数据的有序性,并且有较高的查询效率。InnoDB 使用聚簇索引 (Clustered Index),数据和索引存储在一起,主键索引即为数据页。在没有显式主键时,InnoDB 会自动生成一个隐式主键。
2.5、*Redo 日志与 Undo 日志*
- Redo 日志: 记录事务的修改操作,确保数据库崩溃后能够通过日志恢复数据。Redo 日志是顺序写入磁盘的,写入效率较高。
- Undo 日志: 保存数据的旧版本,以便在事务回滚时恢复数据。MySQL 中的 MVCC (多版本并发控制) 机制依赖 Undo 日志来实现数据的多版本控制。
三、数据文件和表空间文件的区别
方面 | 数据文件 (Data File) | 表空间文件 (Tablespace File) |
---|---|---|
定义 | 表中数据和索引的物理存储文件 | 数据库中逻辑上存储数据的空间 |
作用 | 存储单个表的数据和索引 | 管理多个数据文件,包含多个表的数据或一个表的数据 |
文件类型 | .ibd 文件(独立表空间) |
ibdata1 文件(共享表空间)或 .ibd 文件(独立表空间) |
独立性 | 每个表有一个独立的数据文件 | 共享表空间时,所有表的数据都存储在一个文件中 |
默认配置 | 在 InnoDB 中,默认开启独立表空间 | MySQL 默认使用独立表空间配置 |
管理和恢复 | 独立表空间下,数据文件管理更加灵活和便于备份 | 共享表空间模式下,恢复和管理可能较为复杂 |
四、表空间,数据页,行的关系
+----------------------------------------------------+
| 表空间(Tablespace) |
+----------------------------------------------------+
| 数据页 1(Page 1) |
| +--------------------------------------------+ |
| | 行 1(Row 1) | |
| | 行 2(Row 2) | |
| | 行 3(Row 3) | |
| +--------------------------------------------+ |
| |
| 数据页 2(Page 2) |
| +--------------------------------------------+ |
| | 行 4(Row 4) | |
| | 行 5(Row 5) | |
| +--------------------------------------------+ |
| |
| 数据页 3(Page 3) |
| +--------------------------------------------+ |
| | 行 6(Row 6) | |
| +--------------------------------------------+ |
+----------------------------------------------------+
五、总结
MySQL 通过改进存储引擎、优化物理数据结构和引入新功能,为开发者提供了更高效的数据库管理和查询性能。在理解 MySQL 的基本概念和物理数据结构后,开发者可以根据实际应用场景,优化数据库设计和查询,从而在项目中实现更优的性能表现。
来源:[公众号]Java极客技术