272

我知道这个问题以前曾被问过,但大多数时候是针对特定数据库或表提出的。我无法在此站点上找到描述这两个引擎及其差异的答案,而不考虑某人的特定数据库。

我希望将来能够在设计表或数据库方面做出更明智的决定,因此我正在寻找关于两个存储引擎之间差异的全面答案。

MyISAMInnoDB之间有什么区别,在尝试选择其中一个时我应该寻找什么?

4

2 回答 2

433

InnoDB 和 MyISAM 之间的主要区别(“关于设计表或数据库”您询问)是对“引用完整性”和“事务”的支持。

如果您需要数据库来强制执行外键约束,或者您需要数据库来支持事务(即,由两个或多个 DML 操作所做的更改作为单个工作单元处理,应用所有更改,或者还原所有更改)那么你会选择 InnoDB 引擎,因为 MyISAM 引擎没有这些功能。

这是最大的两个区别。另一个很大的区别是并发性。使用 MyISAM,DML 语句将获得表上的排他锁,并且在持有该锁时,没有其他会话可以对表执行 SELECT 或 DML 操作。

您询问的这两个特定引擎(InnoDB 和 MyISAM)具有不同的设计目标。MySQL 也有其他存储引擎,有自己的设计目标。

因此,在 InnoDB 和 MyISAM 之间进行选择时,第一步是确定您是否需要 InnoDB 提供的功能。如果没有,那么 MyISAM 值得考虑。

对差异进行更详细的讨论是不切实际的(在这个论坛中),如果没有对问题空间进行更详细的讨论......应用程序将如何使用数据库,有多少表,表的大小,事务负载,选择量、插入、更新、并发要求、复制特性等。


数据库的逻辑设计应以数据分析和用户需求为中心;使用关系数据库的选择会在以后出现,甚至更晚会选择 MySQL 作为关系数据库管理系统,然后为每个表选择存储引擎。

于 2012-09-27T05:33:43.997 回答
353

米萨姆:

  1. MISAM 支持表级锁定
  2. MyISAM 专为速度需求而设计
  3. MyISAM 不支持外键,因此我们将 MySQL 与 MISAM 称为 DBMS
  4. MyISAM 使用单独的三个不同文件将其表、数据和索引存储在磁盘空间中。(表名.FRM、表名.MYD、表名.MYI)
  5. MISAM 不支持交易。您不能使用 MISAM 提交和回滚。一旦你发出一个命令,它就完成了。
  6. MISAM 支持全文搜索
  7. 您可以使用 MyISAM,如果表更静态,选择较多,更新和删除较少。

诺德:

  1. InnoDB 支持行级锁定
  2. InnoDB 专为处理大量数据时的最佳性能而设计
  3. InnoDB 支持外键因此我们称 MySQL 与 InnoDB 是 RDBMS
  4. InnoDB 将其表和索引存储在表空间中
  5. InnoDB 支持事务。您可以使用 InnoDB 提交和回滚
于 2013-04-29T02:55:57.517 回答