Storage Engine 存储引擎
April 6, 2023About 2 min
Storage Engine 存储引擎
InnoDB
兼顾高可靠性和高性能的通用存储引擎
MySQL5.5 后默认 InnoDB
特点
- DML 操作遵循 ACID,支持事务
- 行级锁,提高并发访问性能
- 支持外键 foreign key 约束,保证数据的完整性和正确性
文件
.frm
: 表结构会保存在这个文件。在 MySQL 中建立一张表都会生成一个.frm 文件,该文件是用来保存每个表的元数据信息的,主要包含表结构定义。.ibd
: 文件名是表名,innoDB 引擎的每张表都会对应这样一个表空间文件,存储该表的表结构(frm、sdi)、数据和索引ibd 是二进制文件,无法直接打开,可以输入指令 ibd2sdi 得到可查看的 JSON
逻辑存储结构

- 表空间 Tablespace
- 段 Segment
- 区 Extent
- 页 Page
- 行 Row
其他引擎及选择
MyISAM
MyISAM 是 MySQL 早期的默认存储引擎
特点
- 不支持事务,不支持外键
- 支持表锁,不支持行锁
- 访问速度快
文件
.sdi
表结构.myd
存放数据.myi
存放索引,MyISAM没有聚簇索引,数据与索引是分开的
Memory
Memory 引擎的表数据时存储在内存中的,由于受到硬件问题、或断电问题的影响,只能将这些表作为临时表或缓存使用。
特点
- 内存存放
- hash 索引(默认)
文件
.sdi
: 存储结构信息
对比
这两种用的比较少,因为使用 MyISAM 的场景被 MongoDB 取代,Memory 的场景被 Redis 取代。
总结:
InnoDB 支持行级别的锁粒度,MyISAM 不支持,只支持表级别的锁粒度。
MyISAM 不提供事务支持。InnoDB 提供事务支持,实现了 SQL 标准定义了四个隔离级别。
MyISAM 不支持外键,而 InnoDB 支持。
MyISAM 不支持 MVCC,而 InnoDB 支持。
虽然 MyISAM 引擎和 InnoDB 引擎都是使用 B+Tree 作为索引结构,但是两者的实现方式不太一样。
InnoDB的B+树主键索引的叶子节点就是数据文件,辅助索引的叶子节点是主键的值;而MyISAM的B+树主键索引和辅助索引的叶子节点都是数据文件的地址指针。
MyISAM 不支持数据库异常崩溃后的安全恢复,而 InnoDB 支持。
InnoDB 的性能比 MyISAM 更强大。
应用
核心数据 InnoDB
非核心数据可以 MyISAM,如足迹啥的,其实这种可以用 Mongo DB 代替