我知道以前有人问过这个问题,但大多数时候都是针对特定的数据库或表提出的.我在这个网站上找不到一个答案来描述这两个引擎及其差异,而不考虑某个人的特定数据库.

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

MyISAMInnoDB之间有什么区别?当我试图在两者之间做出 Select 时,我应该寻找什么?

推荐答案

InnoDB和MyISAM之间的主要区别("在设计表或数据库方面"你问过)是对"引用完整性"和"事务"的支持.

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

这是两个最大的区别.另一个很大的区别是并发性.使用MyISAM,DML语句将获得表上的独占锁,当该锁被持有时,其他会话无法对表执行SELECT或DML操作.

您询问的两个特定引擎(InnoDB和MyISAM)有不同的设计目标.MySQL还有其他存储引擎,它们有自己的设计目标.

因此,在InnoDB和MyISAM之间进行 Select 时,第一步是确定是否需要InnoDB提供的功能.如果没有,那么MyISAM将被考虑.

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


数据库的逻辑设计应以数据分析和用户需求为中心;使用关系数据库的 Select 会在以后出现,甚至会在以后 Select MySQL作为关系数据库管理系统,然后 for each 表 Select 存储引擎.

Mysql相关问答推荐

MySQL InnoDB:可以在没有回滚损失的情况下从运行的查询中进行大型插入吗

我需要为用户提供MySQL视图和存储的 routine ,但不是基础表

S在我的SQL代码中的外键出了什么问题?

SQL 查询仅当成员共享确切值时才 Select 成员对

时间戳上滚动窗口的 SQL 计数不同

仅当 SELECT 语句在 MySQL 中给出空集时才执行 UPDATE 语句

一次更新mysql中的多个列

当用它的别名替换 (MAX(s.salary) - MIN(s.salary) 它将不起作用.. 为什么?

创建将列与多个值进行比较的索引

由于长时间操作而断开连接后,我的 sql 查询是否继续执行?

我在查询中没有得到正确的结果

查询给出错误时的 mySQL Group_Concat 和 Case

DECIMAL(m, n) 在 64 位系统中如何表示?

无法在两个 mysql 表上执行内部联接

加快 MySQL 中的行计数

Amazon RDS Aurora 与 RDS MySQL 与 EC2 上的 MySQL?

MySQL Workbench 无法加载 mysql.proc

仅在 MYSQL DATEDIFF 中显示小时数

在 MySQL 中删除数据库返回删除数据库错误:66

获取最后一组不同的记录