InnoDB 和 MyISAM 有什么区别?

InnoDB 和 MyISAM 有什么区别?

我目前的 Web 项目使用 MySQL 作为数据库。我是 MySQL 新手。请向我解释一下 InnoDB 和 MyISAM 之间的区别。

答案1

ISAM = 索引顺序访问方法,本质上是一个平面文件(对于那些记得的 DBA 来说,想想 Btrieve 或 B-Tree)。这是一项非常古老的技术 - 但不要因此而放弃使用它。因为它是一个平面文件(稍后会详细介绍),所以它不是关系型的,因此不是 RDBMS,因此在某些情况下更合适。

InnoDB 是您可能最熟悉的完整 RDBMS。MyISAM 可以通过在顶部添加另一层来呈现关系,该层可维护您的链接、逻辑和引用完整性。

如果您拥有大量记录(例如 2000 万条),并且这些记录大多是独立的(即您不需要进行大量链接来检索相关数据),那么 ISAM 就非常出色。它非常依赖索引,如果您没有正确的索引,请做好非常非常长的查询时间的准备。举个例子:我们有一个包含 2000 多万条记录的 Btrieve ISAM 表,并且根据准确的索引检索和过滤数据几乎是即时的。使用错误的索引实际上需要 15 分钟。

如果您有很多关系链接,InnoDB 是很好的选择。表 A 引用表 B 中的字段,而表 B 又引用表 C 和表 D。InnoDB 可以使用各种不错的连接方法(哈希连接等)来获取这些记录,而 ISAM 数据库则必须为每一行运行多个子查询并手动匹配记录。

如果您想要了解更多细节,您真的必须参加数据库课程!

答案2

最根本的是,InnoDB 是事务型的。MyIsam 不是。MyIsam 通常要快一点,所以如果你不需要事务,那么它通常是你最好的选择。有关详细描述,你应该阅读 MySQL 文档。

答案3

如今,除非您使用表来存储日志样式的数据(INSERT 多于 SELECT,没有事务),否则 InnoDB 通常更快、更可靠、具有更多功能等。

MyISAM 的唯一其他功能是全文搜索,这对于基本用途来说已经足够了,但是大多数人会使用 Lucene 的一些功能来处理一些重要的事情。

无论你必须调整 MySQL,因为其默认值基本上是为与其他服务共享的 32MB 奔腾处理器设置的。

答案4

一般来说,经验法则是,如果您想要速度,请使用 MyISAM,如果您想要稳定性,请使用 InnoDB。如果我没记错的话,这与原子性有关。

相关内容