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 参考手册。