MyISAM和InnoDB有什么区别?

我知道这个问题以前曾经被问过,但大部分时间都是针对一个特定的数据库或表格提出的。 我无法在这个网站上find答案,描述这两个引擎及其差异,而不考虑某个特定的数据库。

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

MyISAM和InnoDB之间有什么区别,当我试图在一个或另一个之间做出决定时,我应该寻找什么?

InnoDB和MyISAM之间的主要区别(你问到的“关于devise表或数据库的问题”)是对“参照完整性”和“事务”的支持。

如果您需要数据库来强制执行外键约束,或者您需要数据库来支持事务(即将两个或多个DML操作作为单个工作单元进行的更改,应用所有更改或还原所有更改)那么你会selectInnoDB引擎,因为这些function在MyISAM引擎中是不存在的。

这是两个最大的区别。 另一个很大的不同是并发性。 使用MyISAM,DML语句将在表上获得排它锁,并且在该锁被保持的情况下,其他任何会话都不能在该表上执行SELECT或DML操作。

你问的两个特定的引擎(InnoDB和MyISAM)有不同的devise目标。 MySQL也有其他的存储引擎,有自己的devise目标。

因此,在InnoDB和MyISAM之间进行select时,首先要确定是否需要InnoDB提供的function。 如果没有,那么MyISAM就要考虑了。

关于差异的更详细的讨论是相当不切实际的(在这个论坛中)缺less对问题空间的更详细讨论…应用程序将如何使用数据库,有多less表,表的大小,事务负载,卷的select,插入,更新,并发需求,复制function等


数据库的逻辑devise应以数据分析和用户需求为中心; 使用关系数据库的select会晚一些,甚至以后会selectMySQL作为关系数据库pipe理系统,然后为每个表select一个存储引擎。

MYISAM:

  1. MYISAM支持表级locking
  2. MyISAM专为需要速度而devise
  3. MyISAM不支持外键,因此我们称MYISAM为DBMS
  4. MyISAM使用单独的三个不同的文件将其表,数据和索引存储在磁盘空间中。 (tablename.FRM,tablename.MYD,tablename.MYI)
  5. MYISAM不支持交易。 你不能提交和M​​YISAM回滚。 一旦你发出一个命令就完成了。
  6. MYISAM支持全文search
  7. 你可以使用MyISAM,如果表更静态,有很多select和less更less和删除。

INNODB:

  1. InnoDB支持行级locking
  2. InnoDB专为处理大量数据时的最佳性能而devise
  3. InnoDB支持外键,所以我们把InnoDB称为MySQL就是RDBMS
  4. InnoDB将表和索引存储在表空间中
  5. InnoDB支持事务。 您可以使用InnoDB进行提交和回滚