MyISAM和InnoDB的区别是什么?

我知道以前也有人问过这个问题,但大多数情况下,这个问题是与特定的数据库或表相关的。我在这个网站上找不到一个答案,描述了这两个引擎和他们的差异,而不尊重某些特定的数据库。

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

MyISAMInnoDB之间的区别是什么,当我试图在一个或另一个之间做出决定时,我应该寻找什么?

280812 次浏览

InnoDB和MyISAM之间的主要区别(“关于设计表或数据库”);你问的)是支持“参考完整性”;和“;transactions"。

如果我们需要数据库执行外键约束或支持事务,我们选择InnoDB(即由两个或多个DML操作所做的更改作为单个工作单元处理,所有更改要么应用,要么恢复)。MyISAM引擎不支持这些特性。

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

你提到的两个引擎(InnoDB和MyISAM)有不同的设计目标。MySQL还有其他存储引擎,它们有自己的设计目标。

在InnoDB和MyISAM之间进行选择时,第一步是确定我们是否需要InnoDB提供的特性。如果不是,那么MyISAM也可以考虑。

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


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

MYISAM:

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

INNODB:

  1. InnoDB支持行级锁
  2. InnoDB的设计是为了在处理大量数据时获得最大的性能
  3. InnoDB支持外键,因此我们称MySQL与InnoDB是RDBMS
  4. InnoDB将表和索引存储在一个表空间中
  5. InnoDB支持事务处理。你可以使用InnoDB提交和回滚