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 支持。