我目前的 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。如果我没记错的话,这与原子性有关。