深入理解 MySQL 支持的存储引擎及其特性对比
MySQL 默认的存储引擎,支持事务、行级锁和外键,是大多数应用场景的首选。
MySQL 5.5 之前的默认引擎,不支持事务,但查询速度快,适合读密集型应用。
将数据存储在内存中,速度极快,但重启后数据丢失,适合临时数据。
将数据存储为 CSV 格式文本文件,方便数据交换,但不支持索引。
高度压缩的存储引擎,适合存储大量历史归档数据,只支持 INSERT 和 SELECT。
MySQL Cluster 的存储引擎,支持高可用性和分布式存储。
| 特性 | InnoDB | MyISAM | MEMORY | CSV | Archive | NDB |
|---|---|---|---|---|---|---|
| 事务支持 | ✓ 支持 | ✗ 不支持 | ✓ 支持 | ✗ 不支持 | ✗ 不支持 | ✓ 支持 |
| 锁机制 | 行级锁 | 表级锁 | 表级锁 | 表级锁 | 行级锁 | 行级锁 |
| 外键支持 | ✓ 支持 | ✗ 不支持 | ✓ 支持 | ✗ 不支持 | ✗ 不支持 | ✓ 支持 |
| MVCC | ✓ 支持 | ✗ 不支持 | ✗ 不支持 | ✗ 不支持 | ✗ 不支持 | △ 部分 |
| 崩溃恢复 | ✓ 支持 | ✗ 不支持 | ✗ 不支持 | ✗ 不支持 | ✗ 不支持 | ✓ 支持 |
| 全文索引 | ✓ 支持 (5.6+) | ✓ 支持 | ✗ 不支持 | ✗ 不支持 | ✗ 不支持 | ✗ 不支持 |
| 空间索引 | ✓ 支持 | ✓ 支持 | ✗ 不支持 | ✗ 不支持 | ✗ 不支持 | ✗ 不支持 |
| 哈希索引 | ✗ 不支持 | ✗ 不支持 | ✓ 支持 | ✗ 不支持 | ✗ 不支持 | ✓ 支持 |
| 数据缓存 | ✓ 支持 | ✓ 支持 | ✗ 不支持 | ✗ 不支持 | ✗ 不支持 | ✓ 支持 |
| 索引缓存 | ✓ 支持 | ✓ 支持 | ✓ 支持 | ✗ 不支持 | ✗ 不支持 | ✓ 支持 |
| 压缩数据 | ✓ 支持 | ✗ 不支持 | ✗ 不支持 | ✗ 不支持 | ✓ 支持 | ✗ 不支持 |
| 存储空间 | 较高 | 低 | 中等 (内存) | 低 | 极低 | 较高 |
| 内存使用 | 高 | 低 | 极高 | 低 | 低 | 高 |
| 批量插入速度 | 中等 | 高 | 高 | 高 | 极高 | 中等 |
| 查询速度 | 中等 | 高 | 极高 | 低 | 低 | 中等 |
| 集群支持 | △ 通过 Group Replication | ✗ 不支持 | ✗ 不支持 | ✗ 不支持 | ✗ 不支持 | ✓ 原生支持 |
| 适用场景 | OLTP、高并发 | 读密集型、报表 | 临时数据、缓存 | 数据交换 | 日志归档 | 高可用集群 |
雷达图展示了各存储引擎在不同维度上的表现(数值越大表示越好)
需要事务支持、高并发读写、外键约束,确保数据一致性
以读为主,不需要事务,查询性能要求高,适合报表统计
临时会话数据,读写频繁,重启可丢失,追求极致性能
大量历史日志,只追加不修改,需要高压缩比节省空间
需要与其他系统交换数据,CSV 格式通用性强
需要高可用、无单点故障、分布式存储的场景