一、引擎分类
1)InnoDB(默认存储引擎)
● 特性
○ 完整 ACID 事务支持:通过 redo log(重做日志)和 undo log(回滚日志)实现崩溃恢复与事务回滚。
○ 行级锁 + MVCC:提升并发性能,减少锁冲突(如高并发订单系统)。
○ 外键约束:保证数据完整性,级联更新/删除。
○ 聚簇索引:数据文件与索引文件绑定(.ibd),数据按主键物理顺序存储,主键查询效率高。
● 适用场景:
○ OLTP 系统(如电商交易、银行转账)
○ 高并发读写场景
○ 需要外键约束的业务
● 5.7&5.8版本物理存储结构
○ 在版本5.7中创建一张普通的InnoDB表,在数据库的data目录下会生成2个文件:*.frm 表结构文件,*.idb 数据文件。

○ 在版本8.0中创建一张普通的InnoDB表,只在数据库的data目录下生成1个文件:*.idb数据文件;表的元数据信息存储在了系统表information_schema.COLUMNS中.
select * from information_schema.`COLUMNS` where table_name = 't1'

2)MyISAM
● 特性:
○ 高速读取:存储结构分为数据文件(.MYD)和索引文件(.MYI),非聚簇索引(索引与数据分离),适合全表扫描。
○ 全文索引:支持 FULLTEXT 索引(MySQL 5.6前唯一选择)。
○ 表级锁:不支持事务和行级锁,写入时锁定整张表,并发性能差。
● 适用场景:
○ 读密集型应用(如日志分析、报表生成)
○ 静态数据存储(如配置表、历史数据归档)
○ 只读或读写较少的场景(如博客、新闻网站)
● 5.7&5.8版本物理存储结构
○ 在版本5.7中创建一张普通的MyISAM表,在数据库的data目录下会生成3个文件:*.frm表结构文件,*.MYD数据文件,*.MYI索引文件。

○ 在版本8.0中创建一张普通的MyISAM表,只在数据库的data目录下会生成3个文件:*.MYD数据文件,*.MYI索引文件,*.sdi序列化存储的元数据信息;同时表的元数据信息也在系统表information_schema.COLUMNS中存储了一份。

select * from information_schema.`COLUMNS` where table_name = 't2';

3)Memory
● 特性:
○ 内存存储:数据完全驻留内存,读写延迟低。
○ 无持久化:不支持事务,服务器重启后数据丢失。
○ 表级锁:仅支持哈希索引或 B-Tree 索引。
● 适用场景:
○ 会话缓存(如用户登录状态)
○ 临时结果集(如中间计算数据)
4)NDB Cluster
● 特性:
○ 分布式架构:数据分片存储于多节点,支持高可用。
○ 事务支持:与 InnoDB 类似,但需搭配 MySQL Cluster 使用。
● 适用场景:
○ 电信级高可用系统
○ 实时计费系统
二、引擎对比
| 特性 | InnoDB | MyISAM | Memory | NDB |
|---|---|---|---|---|
| 事务支持 | ✅ | ❌ | ❌ | ✅ |
| 锁粒度 | 行级锁 | 表级锁 | 表级锁 | 行级锁 |
| 外键约束 | ✅ | ❌ | ❌ | ❌ |
| 全文索引 | ✅ (5.6+) | ✅ | ❌ | ❌ |
| 存储位置 | 磁盘 | 磁盘 | 内存 | 内存/磁盘 |
| 崩溃恢复 | ✅ | ❌ | ❌ | ✅ |
| 压缩能力 | 表压缩 | 只读压缩 | ❌ | ❌ |
三、附录
3.1、查询当前数据支持的存储引擎
SHOW ENGINES

● Engine:支持的引擎名称
● Support:是否支持,DEFAULT表示默认存储引擎,YES表示支持,NO表示不支持
● Comment:存储引擎的备注
● Transactions:是否支撑事务,YES表示支持,NO表示不支持
● XA:是否支持 XA 分布式事务(跨多个数据库的协调事务),YES表示支持,NO表示不支持
● SavePoints:是否支持 保存点(Savepoint),允许事务部分回滚,YES表示支持,NO表示不支持 3.2、创建表指定存储引擎 ● 直接使用SQL语句指定存储引擎,不指定默认为InnoDB
CREATE TABLE t1 (i INT) ENGINE = InnoDB;
CREATE TABLE t2 (i INT) ENGINE = MyISAM;
CREATE TABLE t3 (i INT) ENGINE = MEMORY;
● Navicat中创建表在Options中选择指定存储引起
