MySQL | 进阶-存储引擎

本文更新于 2026-04-02

MySQL 体系结构

连接层 (Connection Layer)

最上层由一些客户端和链接服务组成,主要完成连接处理、授权认证及相关的安全方案。服务器会为每个成功接入的客户端验证其所具有的操作权限,确保数据访问的安全性。

服务层 (Service Layer)

第二层架构是 MySQL 的大脑,主要完成大多数的核心服务功能:

  • 功能组件:包括 SQL 接口、解析器、优化器以及部分内置函数的执行(如日期、时间、数学函数等)。
  • 跨引擎实现:所有跨存储引擎的功能都在这一层实现,例如存储过程、触发器、视图等。
  • 查询缓存:完成对 SQL 查询缓存的处理和匹配。

存储引擎层

引擎层 (Engine Layer)

存储引擎层真正负责了 MySQL 中数据的存储和提取,是插件式的架构。

  • 通信方式:服务器通过 API 与不同的存储引擎进行通信。
  • 灵活选择:不同的存储引擎具有不同的特性和功能(如 InnoDB 支持事务,而 MyISAM 不支持),我们可以根据业务需求选取合适的存储引擎。

存储层 (Storage Layer)

最底层是数据存储层,主要将数据存储在文件系统之上(如磁盘、日志文件等),并完成与上层存储引擎的数据交互。


存储引擎

  • 存储引擎就是存储数据、建立索引、更新/查询数据等技术的实现方式。存储引擎是基于表的,而不是基于数据库的,所以存储引擎也可以被称为表类型。

核心:InnoDB 存储引擎

InnoDB 是 MySQL 5.5 之后默认的存储引擎,也是最通用的引擎。

  • 特点
    • 事务 (ACID):DML操作支持事务安全,具有提交、回滚和崩溃恢复能力。
    • 外键 (Foreign Key):支持外键约束,保证数据的完整性。
    • 行级锁 (Row-level Locking):提高多用户并发操作的性能。
  • 文件存储
    • 每一张 InnoDB 表对应一个 .ibd 表空间文件(存储表结构(frm,sdi)、数据和索引)
    • 参数:innodb_file_per_table
  • 逻辑存储结构
    • TableSpace(表空间) -> Segment(段) -> Extent(区,1MB) -> Page(页,16KB,磁盘操作的最小单元) -> Row(行)

MyISAM 存储引擎

MyISAM 是 MySQL 早期的默认存储引擎。它不支持事务,但在读取性能和空间占用上具有一定优势。

  • 介绍:主要用于以读为主的业务场景。
  • 特点
    • 不支持事务,不支持外键。
    • 支持表级锁,不支持行级锁。
    • 访问速度快,占用空间相对较小。
  • 文件存储:每一张 MyISAM 表对应三个文件:
    • xxx.sdi:存储表结构信息(JSON 格式)。
    • xxx.MYD:存储数据 (MYData)。
    • xxx.MYI:存储索引 (MYIndex)。

Memory 存储引擎

Memory 引擎将表数据存储在内存中,由于不需要磁盘 I/O,其访问速度极快。

  • 介绍:通常用于存储临时数据、缓存或中间计算结果。
  • 特点
    • 内存存放:速度极快,但安全性低。
    • 易失性:一旦数据库重启或崩溃,内存表中的数据会全部丢失,但表结构会保留。
    • 默认使用 Hash 索引(适合等值查询,不适合范围查询)。
    • 支持表级锁。
  • 文件存储
    • xxx.sdi:只存储表结构信息。数据全部驻留在内存中,不生成物理数据文件。 重点

存储引擎选择建议

  • InnoDB首选

  • 如果应用对事务的完整性有要求,或者需要处理高并发的增删改查操作,InnoDB 是唯一的选择。

  • MyISAM:过去MySQL的引擎

  • 如果应用是以读操作和插入操作为主,只有很少的更新和删除操作,并且对事务的完整性、并发性要求不是很高,那么可以选择 MyISAM(但在现代开发中已逐渐被 InnoDB 取代)

  • Memory:将所有数据保存在内存中,访问速度极快

  • 通常用于存储临时数据或缓存,由于数据在断电或重启后会丢失,因此不适合存储持久化数据。

存储引擎相关 SQL 操作

  • 查看当前数据库支持的存储引擎
    SHOW ENGINES;
    
  • 创建表时指定存储引擎
    CREATE TABLE 表名 (
        ...
    ) ENGINE = INNODB;
    
  • 查询建表语句(查看当前表引擎)
    SHOW CREATE TABLE 表名;
    
今日访问 ... 次 | 今日访客 ... 人 | 本页阅读 ...
小站已萌萌哒运行了 0 0 0
已累计耕耘 33 篇博文 · 共 115.17k 个字
总访问量 ...
备案图标 豫公网安备41019702004633号