MySQL存储引擎总结

MySQL提供了多种存储引擎,每种引擎的使用场景和特性总结如下:

概述

MySQL 使用插件式存储引擎架构,使得存储引擎可以在运行中的 MySQL 服务器。

要确定服务器支持哪些存储引擎,可以使用 SHOW ENGINES 语句。

Support 列的值表明某个引擎是否可用 (YES)、不可用 (NO) 或是当前设置为默认存储引擎 (DEFAULT)。

Engine Support Comment Transactions XA Savepoints
InnoDB DEFAULT Supports transactions, row-level locking, and foreign keys YES YES YES
MRG_MYISAM YES Collection of identical MyISAM tables NO NO NO
MEMORY YES Hash based, stored in memory, useful for temporary tables NO NO NO
BLACKHOLE YES /dev/null storage engine (anything you write to it disappears) NO NO NO
MyISAM YES MyISAM storage engine NO NO NO
CSV YES CSV storage engine NO NO NO
ARCHIVE YES Archive storage engine NO NO NO
PERFORMANCE_SCHEMA YES Performance Schema NO NO NO
FEDERATED NO Federated MySQL storage engine null null null

主要存储引擎

InnoDB

  • 默认存储引擎:InnoDB 是 MySQL 8.4 的默认存储引擎。
  • 事务安全:支持 ACID(原子性、一致性、隔离性、持久性)事务,提供提交、回滚和崩溃恢复功能。
  • 锁机制:支持行级锁定,不升级为更粗粒度的锁。
  • 索引类型:使用聚簇索引来减少基于主键的常见查询的 I/O 操作。
  • 外键约束:支持外键引用完整性约束,以维护数据完整性。
  • 锁定粒度:行级锁定。
  • MVCC:支持。

MyISAM

  • 空间优势:MyISAM 表占用空间较小。
  • 锁定机制:表级锁定,适用于只读或读多写少的工作负载。
  • 事务支持:不支持事务。
  • 索引类型:B-tree 索引。
  • 压缩数据:支持压缩行格式,但此类表为只读。
  • 全文本搜索索引:支持。
  • 锁定粒度:表级锁定。

MEMORY

  • 快速访问:所有数据存储在 RAM 中,适用于需要快速查找非关键数据的环境。
  • 索引类型:哈希索引和 B-tree 索引。
  • 锁定粒度:表级锁定。
  • 存储限制:受限于 RAM 大小。

CSV

  • CSV 文件:表格实际上是逗号分隔值的文本文件,允许导入或导出 CSV 格式的数据,与读取和写入相同格式的脚本和应用程序交换数据。
  • 无索引:由于 CSV 表没有索引,通常在正常操作中将数据保留在 InnoDB 表中,仅在导入或导出阶段使用 CSV 表。
  • 锁定粒度:表级锁定。
  • 存储限制:无明确限制,但受操作系统对文件大小的限制影响。

Archive

  • 紧凑无索引:这些表设计用于存储和检索大量很少引用的历史、归档或安全相关数据。
  • 压缩:为了节省空间,Archive 表的数据是压缩存储的。
  • 索引类型:不支持索引。
  • 锁定粒度:表级锁定。
  • 存储限制:无明确限制。

特殊用途存储引擎

FEDERATED

  • 远程数据访问:FEDERATED 存储引擎允许创建指向远程 MySQL 数据库中表的表,使本地查询可以透明地访问远程数据。
  • 事务支持:不支持事务、X/Open XA 分布式事务处理或保存点。
  • 锁定粒度:取决于远程表的存储引擎。

BLACKHOLE

  • 数据黑洞:BLACKHOLE 存储引擎类似于 /dev/null,任何写入它的数据都会消失,常用于测试或日志记录。
  • 事务支持:不支持事务、X/Open XA 分布式事务处理或保存点。
  • 锁定粒度:无锁定需求。

MERGE

  • 合并多个表:MERGE 存储引擎允许将一组相同的 MyISAM 表作为单个表来访问,具有一定的优点和局限性。
  • 事务支持:不支持事务、X/Open XA 分布式事务处理或保存点。
  • 锁定粒度:表级锁定。

EXAMPLE

  • 示例引擎:仅供开发人员学习和测试,它不做任何实际的数据存储。
  • 事务支持:不支持事务、X/Open XA 分布式事务处理或保存点。
  • 锁定粒度:无锁定需求。

以上信息来自 MySQL 8.4 参考手册