InnoDB 与 MyISAM 区别

198 阅读2分钟

区别

1、InnoDB 支持事务,MyISAM 不支持事务。
2、InnoDB 支持外键,MyISAM 不支持外键。
3、InnoDB 是聚集索引,MyISAM 是非聚集索引。
4、InnoDB 不保存表的具体行数,执行 select count(*)from table 会扫描全表,MyISAM 用一个变量保存整个表的行数,执行上述语句,只需取出变量值。
5、InnoDB 是行锁级,MyISAM 是表锁级。
6、InnoDB表必须有唯一索引(如主键)(用户没有指定的话会自己找/生产一个隐藏列Row_id来充当默认主键),而Myisam可以没有

比较聚集索引和非聚集索引

聚集索引使用 B+Tree 作为索引结构,数据文件是和(主键)索引绑在一起的(表数据文件本身就是按 B+Tree 组织的一个索引结构),必须要有主键,通过主键索引效率很高。但是辅助索引需要两次查询,先查询到主键,然后再通过主键查询到数据。因此,主键不应该过大,因为主键太大,其他索引也都会很大。

非聚集索引,也是使用 B+Tree 作为索引结构,索引和数据文件是分离的,索引保存的是数据文件的指针。主键索引和辅助索引是独立的。

InnoDB 的 B+ 树主键索引的叶子节点就是数据文件,辅助索引的叶子节点是主键的值;而 MyISAM 的 B+ 树主键索引和辅助索引的叶子节点都是数据文件的地址指针。

怎么选择

1、如果需要支持事务,选择 InnoDB,如果不需要可以考虑 MyISAM。
2、如果需要支持外键,选择 InnoDB,如果不需要可以考虑 MyISAM。
3、如果读的操作多余写的操作,可以考虑 MyISAM,如果既有读也有写,请使用InnoDB。