MyISAM 和 InnoDB 都是 MySQL 中最常用的两种存储引擎,在 MySQL 的官方文档中,可以看出二者的区别,官方说明链接如下:

  1. InnoDB 引擎说明:https://dev.mysql.com/doc/refman/8.0/en/innodb-introduction.htmlopen in new window
  2. MyISAM 引擎说明:https://dev.mysql.com/doc/refman/8.0/en/myisam-storage-engine.htmlopen in new window

考虑到便捷性和易读性我这里整合了一幅图,并将官方文档翻译成了中文,二者的区别如下: image.png 从上面的对比图中我们可以看出,它们的区别主要体现在以下 7 点:

  1. 事务支持不同:MyISAM 是非事务型存储引擎,它不支持事务操作;而 InnoDB 是事务型存储引擎,所以它是支持事务操作的,它可以保证数据的完整性和一致性。
  2. 聚集索引的支持不同:MyISAM 不支持聚集索引,而 InnoDB 支持聚集索引。
  3. 数据缓存支持不同:MyISAM 不支持数据缓存,而 InnoDB 支持数据缓存。
  4. 外键支持不同:MyISAM 不支持外键,而 InnoDB 支持外键。
  5. 锁粒度不同:InnoDB 支持行级锁定,可以对数据表的某行进行锁定,而不会锁定整个表,这样可以提高并发读写的能力;而 MyISAM 只支持表级锁定,只能对整个表进行锁定,这样容易造成大量的读写冲突和性能瓶颈。
  6. 存储限制不同:MyISAM 支持 256TB 的数据存储,而 InnoDB 只支持 64TB 的数据存储。
  7. MVCC 支持不同:MVCC (多版本并发控制)是一种数据库管理系统中的并发控制方法,它允许多个事务同时读取数据库中的同一数据,而不会相互干扰。MVCC通过为每个事务创建一个独立的“视图”来实现这一点,该视图显示了数据库在该事务开始时的状态。当事务读取数据时,它只能看到该视图中的数据,而不是实际的数据库状态。这意味着即使其他事务正在修改相同的数据,该事务也不会受到影响,因为它只能看到它开始时的数据状态。MyISAM 是不支持 MVCC 的,而 InnoDB 支持。

特殊说明

以上内容来自我的《Java 面试突击训练营》,这门课程是有着十几年工作经验(前 360 开发工程师),10 年面试官经验的我,花费 4 年时间打磨完成的一门视频面试课。学完训练营的课程之后,基本可以应对目前市面上绝大部分公司的面试了,并且课程配备了 9 大就业服务,帮助上千人找到 Java 工作,其中上百人拿到大厂 Offer,学员最高薪资 70W 年薪,面试课目录和 9 大服务如下:

加我微信咨询:vipStone【备注:训练营】