前言:MySQL 默认引擎变化
在 MySQL 5.5版本时,InnoDB 存储引擎取代了原先的引擎 MyISAM 成为新的默认存储引擎
那么我们要思考为什么 MySQL 开发者选择使用 InnoDB 呢?因为他们意识到了 MyISAM 引擎在许多方面的不足,以及一些对未来发展有局促性的缺陷,比如:
MyISAM 缺点
- 不支持事务,不支持外键
- 不支持行级锁,最小粒度为表级锁,易发生锁冲突
- 崩溃后无法安全恢复
随着科技的发展,现在大大小小的公司业务都会遇到一些并发安全的问题,倘若发生线程冲突造成数据读取/写入错误,会造成一定的后果,对用户体验也不好。所以在这种市场需求下 MySQL 也逐渐意识到并发安全的重要性,更换了对并发处理更好的 InnoDB 存储引擎,InnoDB 存储引擎弥补了 MyISAM 的并发性缺点,比如支持事务、外键、行级锁、安全恢复等。
适用场景不同
但是并不能代表 InnoDB 存储引擎是万能的,它在一些度方面不如 MyISAM ,以下是这两个引擎各自适合的场景:
MyISAM 适合 :
- count 偏多的计算(会默认计算并存储 count,不用每次都计算,提升了效率)
- 插入少,查询多
- 没有事务的需要
InnoDB 适合 :
- 可靠性要求高、或者需要事务支持
- 表更新和查询频繁
- 易出现表锁定的场景
支持功能不同
属性 | MyISAM | InnoDB |
事务 | 不支持 | 支持 |
锁粒度 | 表级锁 | 行级锁 |
存储 | 拆分文件 | 表空间 |
隔离等级 | 无 | 所有 |
数据主键 | 否 | 是 |
MVCC | 不支持 | 支持 |
缓存数据记录 | 无 | 有 |
数据库崩溃后的安全恢复 | 不支持 | 支持 |
性能 | 弱 | 强 |