MySQL 存储引擎概览
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 | 无 |
| 默认引擎 | ✅ | ❌ | ❌ | ❌ |
三、如何查看和设置存储引擎
查看当前支持的引擎
SHOW ENGINES;
查看表的存储引擎
SHOW TABLE STATUS WHERE Name = 'user';
建表时指定引擎
CREATE TABLE user ( id BIGINT PRIMARY KEY, name VARCHAR(50) ) ENGINE=InnoDB;
四、选型建议(实战经验)
- 99% 的业务表:InnoDB
- 缓存 / 临时数据:Memory
- 日志 / 历史数据:Archive
- 不要在新系统使用 MyISAM
五、面试一句话总结
InnoDB 是 MySQL 的事实标准存储引擎,核心优势是事务、行锁、MVCC 和高可靠性;其他引擎只在特定场景使用。
到此这篇关于MySQL 存储引擎概览的文章就介绍到这了,更多相关mysql存储引擎内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
相关文章
2025版mysql8.0.41 winx64 手动安装详细教程
本文指导Windows系统下MySQL安装配置,包含解压、设置环境变量、my.ini配置、初始化密码获取、服务安装与手动启动等步骤,旨在优化系统兼容性及开机速度,感兴趣的朋友一起看看吧2025-07-07
MySQL DATE_ADD和ADDDATE函数实现向日期添加指定时间间隔
这篇文章主要介绍了MySQL DATE_ADD和ADDDATE函数实现向日期添加指定时间间隔,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧2021-01-01
mysqld_exporter+Prometheus+Grafana 配置小结
本文主要介绍了mysqld_exporter+Prometheus+Grafana 配置,实现了对MySQL数据库的监控和可视化展示,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧2025-05-05
CentOs7安装部署Sonar环境的详细过程(JDK1.8+MySql5.7+sonarqube7.8)
这篇文章主要介绍了CentOs7安装部署Sonar环境(JDK1.8+MySql5.7+sonarqube7.8),本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下2023-06-06
Can''t connect to local MySQL through socket ''/tmp/mysql.so
今天小编就为大家分享一篇关于Can't connect to local MySQL through socket '/tmp/mysql.sock'解决方法,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧2019-03-03


最新评论