我知道以前也有人问过这个问题,但大多数情况下,这个问题是与特定的数据库或表相关的。我在这个网站上找不到一个答案,描述了这两个引擎和他们的差异,而不尊重某些特定的数据库。
我希望在未来能够在设计表或数据库方面做出更明智的决定,所以我正在寻找关于两种存储引擎之间差异的全面答案。
MyISAM和InnoDB之间的区别是什么,当我试图在一个或另一个之间做出决定时,我应该寻找什么?
InnoDB和MyISAM之间的主要区别(“关于设计表或数据库”);你问的)是支持“参考完整性”;和“;transactions"。
如果我们需要数据库执行外键约束或支持事务,我们选择InnoDB(即由两个或多个DML操作所做的更改作为单个工作单元处理,所有更改要么应用,要么恢复)。MyISAM引擎不支持这些特性。
这是两个最大的区别。另一个很大的区别是并发性。使用MyISAM, DML语句将获得表上的排他锁,当该锁被持有时,没有其他会话可以在表上执行SELECT或DML操作。
你提到的两个引擎(InnoDB和MyISAM)有不同的设计目标。MySQL还有其他存储引擎,它们有自己的设计目标。
在InnoDB和MyISAM之间进行选择时,第一步是确定我们是否需要InnoDB提供的特性。如果不是,那么MyISAM也可以考虑。
(在这个论坛上)如果没有对问题空间进行更详细的讨论,对差异进行更详细的讨论是相当不切实际的……应用程序将如何使用数据库、表的数量、表的大小、事务负载、选择、插入、更新的卷、并发需求、复制特性等。
数据库的逻辑设计应以数据分析和用户需求为中心;后来才会选择使用关系数据库,甚至后来才会选择MySQL作为关系数据库管理系统,然后是为每个表选择存储引擎。
MYISAM:
INNODB: