MySQL 的存储引擎(Storage Engine)决定了数据如何存储、索引如何组织、事务是否支持、锁的粒度、崩溃恢复能力等,是数据库性能与可靠性的核心。
一、常见存储引擎对比(重点)
1. InnoDB(默认 / 首选)
特性
- 支持事务(ACID)
- 行级锁(并发能力强)
- 支持外键
- 崩溃恢复(redo / undo log)
- 聚簇索引(数据即索引)
适用场景
- 业务系统(ERP / 电商 / 金融)
- 高并发写入
- 对一致性、可靠性要求高
关键词(面试高频)
- MVCC
- Redo Log / Undo Log
- 行锁 vs 间隙锁
- Buffer Pool
2. MyISAM(已逐渐淘汰)
特性
- 不支持事务
- 表级锁
- 读性能好
- 表损坏风险高
- 数据与索引分离(MYD / MYI)
适用场景
- 只读或读多写少
- 历史系统、统计类查询
MySQL 8.x 中已不推荐使用
3. Memory(内存表)

特性
- 数据存放在内存
- 默认 Hash 索引(也支持 B-Tree)
- 重启即丢数据
- 表级锁
适用场景
- 临时表
- 高速缓存表
- 中间计算结果
4. Archive(归档引擎)
特性
- 高压缩比
- 只支持 INSERT / SELECT
- 不支持索引(除自增)
适用场景
- 日志归档
- 审计数据
- 历史冷数据
5. CSV
特性
- 数据以 CSV 文件形式存储
- 无索引、无事务
适用场景
- 与外部系统做数据交换
- ETL 中转
二、核心差异对比表
| 特性 | InnoDB | MyISAM | Memory | Archive |
|---|---|---|---|---|
| 事务 | ✅ | ❌ | ❌ | ❌ |
| 锁粒度 | 行锁 | 表锁 | 表锁 | 行锁 |
| 崩溃恢复 | ✅ | ❌ | ❌ | ❌ |
| 外键 | ✅ | ❌ | ❌ | ❌ |
| 索引结构 | B+Tree(聚簇) | B+Tree | Hash / B+Tree | 无 |
| 默认引擎 | ✅ | ❌ | ❌ | ❌ |
三、如何查看和设置存储引擎
查看当前支持的引擎
sql
SHOW ENGINES;
查看表的存储引擎
sql
SHOW TABLE STATUS WHERE Name = 'user';
建表时指定引擎
sql
CREATE TABLE user (
id BIGINT PRIMARY KEY,
name VARCHAR(50)
) ENGINE=InnoDB;
四、选型建议(实战经验)
- 99% 的业务表:InnoDB
- 缓存 / 临时数据:Memory
- 日志 / 历史数据:Archive
- 不要在新系统使用 MyISAM
五、面试一句话总结
InnoDB 是 MySQL 的事实标准存储引擎,核心优势是事务、行锁、MVCC 和高可靠性;其他引擎只在特定场景使用。