参考来源:康师傅:https://www.bilibili.com/video/BV1iq4y1u7vj?p=113
爱编程的大李子:https://blog.csdn.net/LXYDSF/article/details/125775011
一、引擎介绍
1. InnoDB 引擎
- 具备外键支持功能的事务存储引擎
- MySQL 从 3.23.34a 开始就包含 InnoDB 存储引擎。大于等于 5.5 之后,默认采用 InnoDB 引擎
- InnoDB 是 MySQL 的 默认事务型引擎 ,它被设计用来处理大量的短期(short-lived)事务。可以确保事务的完整提交(Commit)和回滚(Rollback)。
- 除了增加和查询外,还需要更新、删除操作,那么,应优先选择 InnoDB 存储引擎。
除非有非常特别的原因需要使用其他的存储引擎,否则应该优先考虑InnoDB引擎。 数据文件结构:
- 表名.frm 存储表结构(MySQL8.0时,合并在表名.ibd中)
- 表名.ibd 存储数据和索引
InnoDB是 为处理巨大数据量的最大性能设计。
- 在以前的版本中,字典数据以元数据文件、非事务表等来存储。现在这些元数据文件被删除了。比如:
.frm , .par , .trn , .isl
, 等都在 MySQL 8.0 中不存在了。
- 在以前的版本中,字典数据以元数据文件、非事务表等来存储。现在这些元数据文件被删除了。比如:
- 对比 MyISAM 的存储引擎,InnoDB写的处理效率差一些 ,并且会占用更多的磁盘空间以保存数据和索引。
- MyISAM 只缓存索引,不缓存真实数据;InnoDB不仅缓存索引还要缓存真实数据(加载数据时,也要加载索引),对内存要求较高 ,而且内存大小对性能有决定性的影响。
2. MyISAM 引擎
- 主要的非事务处理存储引擎
- MyISAM 提供了大量的特性,包括全文索引、压缩、空间函数(GIS)等,但 MyISAM 不支持事务、行级锁、外键,有一个毫无疑问的缺陷就是 崩溃后无法安全恢复。
- 5.5 之前默认的存储引擎
- 优势是访问的 速度快 ,对事务完整性没有要求或者以 SELECT、INSERT 为主的应用
- 针对数据统计有额外的常数存储。故而 count(*) 的查询效率很高
数据文件结构
- 表名.frm 存储表结构
- 表名.MYD 存储数据(MYData)
- 表名.MYI 存储索引(MYIndex)
- 应用场景:只读应用或者以读为主的业务
二、引擎对比
MyISAM 和 InnoDB 对比
特点 | MyISAM | InnoDB |
---|---|---|
存储限制 | 有 | 64TB |
事务 | 支持 | |
锁机制 | 表锁,即使操作一条 记录也会锁住整个表,不适合高并发的操作 | 行锁,操作时只锁某一行,不对其它行有影响,适合高并发的操作 |
B树索引 | 支持 | 支持 |
哈希索引 | ||
全文索引 | 支持 | |
集群索引 | 支持 | |
数据缓存 | 支持 | |
索引缓存 | 只缓存索引,不缓存真实数据 | 不仅缓存索引还要缓存真实数据,对内存要求较高,而且内存大小对性能有决定性的影响 |
数据可压缩 | 支持 | |
空间使用 | 低 | 高 |
内存使用 | 低 | 高 |
批量插入的速度 | 高 | 低 |
支持外键 | 支持 | |
关注点 | 性能:节省资源、消耗少、简单业务 | 事务:并发写、事务、更大资源 |