MySQL数据引擎


发布时间:2020-05-15 18:53:30 | 来源: | 编辑整理:超管

在MySQL中,常用的数据引擎有MyISAM和InnoDB。两种类型最主要的差别就是Innodb 支持事务处理、外键和行级锁。而MyISAM不支持。所以MyISAM往往就容易被人认为只适合在小项目中使用。这里所说的行级锁是指最小粒度的锁,也支持表级锁。MyISAM支持表级锁,不支持事务、行级锁和外键。MyISAM强调的是性能,其执行性能比InnoDB要好,在少并发的环境下,查找(下面会讲原因)、插入(由于要维护数据库的完整性)等要比InnoDB要好。建议在对事务有要求或者高并发的情况下,用InnoDB引擎,否则用MyISAM。

下面是一些具体的细节差异:

1. InnoDB不支持FULLTEXT类型的索引。

2. InnoDB 中不保存表的具体行数,也就是说,执行select count(*) from table, InnoDB要扫描一遍整个表来计算有多少行,但是MyISAM只要简单的读出保存好的行数即可。注意的是,当count(*)语句包含 where条件时,两种表的操作是一样的。

3. 对于AUTO_INCREMENT类型的字段,InnoDB中必须包含只有该字段的索引,但是在MyISAM表中,可以和其他字段一起建立联合索引。

4. DELETE FROM table时,InnoDB不会重新建立表,而是一行一行的删除。

5. MyISAM的索引和数据是分开的,并且索引是有压缩的,内存使用率就对应提高了不少。能加载更多索引,而Innodb是索引和数据是紧密捆绑的,没有使用压缩从而会造成Innodb比MyISAM体积庞大不小。


COUNT() 在 MyISAM 表中会非常快,而在InnoDB 表下可能会很痛苦。而主键查询则在InnoDB下会相当相当的快,但需要小心的是如果我们的主键太长了也会导致性能问题。大批的inserts 语句在MyISAM下会快一些,但是updates 在InnoDB 下会更快一些——尤其在并发量大的时候。

冷数据使用MyIsam 可以有更好的查询数据。活跃数据,可以使用Innodb ,可以有更好的更新速度。