一、基本概念

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极客技术