MyISAM 和 InnoDB

Jun 8, 2020


本文参考:这里、这里

区别

  1. InnoDB 支持事务,MyISAM 不支持事务。这是 MySQL 将默认存储引擎从 MyISAM 换到 InnoDB 的重要原因。
  2. InnoDB 支持外键,MyISAM 不支持外键。对一个包含外键的 InnoDB 表转换为 MyISAM 会失败。
  3. InnoDB 是聚集索引,MyISAM 是非聚集索引。聚集索引的文件放在主键索引的叶子节点上,所以 InnoDB 必须要有主键,通过主键索引效率很高。MyISAM 是非聚集索引,数据文件是分离的,索引保存的是数据文件的指针。主键索引和辅助索引是独立的。
  4. InnoDB 不保存表的具体行数。执行 SELECT COUNT(*) FROM table 时需要全表扫描。MyISAM 用一个变量保存了整个表的行数,因此统计全表行数速度很快。
  5. InnoDB 最小的锁粒度是行锁,MyISAM 最小的锁粒度是表锁。
  6. InnoDB 支持 MVCC,MyISAM 不支持。
  7. InnoDB 5.6 之前不支持全文索引(5.6及之后支持),MyISAM支持。

选择

  • 是否需要支持事务。如果要支持事务,选择 InnoDB
  • 如果绝大多数是读查询操作,选择 MyISAM;如果读写均很频繁,则选择 InnoDB
  • 系统崩溃后,MyISAM 恢复更为困难,如果不能接受,则选择 InnoDB