Lukas Asked: 2020-03-17 04:33:45 +0800 CST 2020-03-17 04:33:45 +0800 CST 2020-03-17 04:33:45 +0800 CST 何时使用 MyISAM,何时使用 InnoDB? 772 在 MySQL 中选择存储引擎时,什么时候应该使用 InnoDB,什么时候使用 MyISAM,选择取决于什么?一个优于另一个? 在我的例子中,我有 8 个表,其中一些有 50 万条记录,另一些很小,并且它们都以某种方式相关。 mysql 3 Answers Voted Best Answer ffflabs 2020-03-17T05:03:39+08:002020-03-17T05:03:39+08:00 在 MySQL 5.5 之前的版本中使用 MyISAM 的唯一原因是 InnoDB 不支持分区表或创建 FULLTEXT 索引。 这些限制不再存在。 使用 MyISAM 的唯一原因是读取速度更快,插入速度稍快(整体并测量隔离进程),但这是因为此类操作执行表锁定。 例如,如果您要进行多次更新或并发插入,则表级锁的效率非常低,而 InnoDB 表上的更新使用行级锁,因此允许并发操作。 除此之外,InnoDB 允许使用对维护数据模型的引用完整性至关重要的外键,支持事务。 简而言之,使用 InnoDB 因为 在当前的 MySQL 版本中,它支持 MyISAM 支持的所有内容。 外键/关系完整性 行级锁定 交易 所有这些优势都远远超过了选择速度的下降。 Jose D. Jurado 2020-03-17T05:07:26+08:002020-03-17T05:07:26+08:00 选择取决于各种因素。在您的特定情况下,由于您需要关系设计,因此您必须使用 InnoDB。 一个简短的总结: MyISAM 表锁 如果我们的应用程序执行大量“选择”查询,性能会提高。 这些表可能会导致数据恢复出现问题。 允许全文搜索 更少的 RAM 消耗 恢复数据时通常速度更快。 没有原子性特征,因为它不需要检查引用完整性,也不需要锁定表来执行操作,这就像前面几点一样,让我们的速度更快。 InnoDB 记录锁 交易支持 表现 并发 可靠性 允许全文搜索 (mysql >= 5.6) 它允许具有 ACID 特性(原子性、一致性、隔离性和持久性:西班牙语中的原子性、一致性、隔离性和持久性),保证我们表格的完整性。 数据完整性,当使用 INSERT、DELETE 或 UPDATE 语句修改内容时,存储数据的完整性可能会以多种不同的方式丢失。 InnoDB 从意外的系统错误中恢复或从其日志重新启动,而 MyISAM 需要对尚未刷新到磁盘的表数据进行扫描、修复和索引重建。 此外,如果我们的应用程序大量使用 INSERT 和 UPDATE,我们可能会注意到 MyISAM 的性能提升。 一些感兴趣的链接: MyISAM vs InnoDB(优势和差异) MyISAM 与 InnoDB MyISAM 与 InnoDB BastianBurst 2020-03-17T05:47:04+08:002020-03-17T05:47:04+08:00 今天使用 MyISAM,我看到的关于 innodb 的唯一区别是您可以在(非常长的)文本字段中进行查询,引用其中包含的单词,例如您可以保存一个完整的段落,并说您带来了记录在段落中包含“head”一词,它将带来它们,即它管理文本类型字段的方式,否则我总是使用innodb,在他们上面回答你之前有一定的限制。我会在一个表中使用 MyISAM,该表存储例如一本书的序言在它的一个字段或类似的东西中,并且需要使其成为搜索参数。
在 MySQL 5.5 之前的版本中使用 MyISAM 的唯一原因是 InnoDB 不支持分区表或创建 FULLTEXT 索引。
这些限制不再存在。
使用 MyISAM 的唯一原因是读取速度更快,插入速度稍快(整体并测量隔离进程),但这是因为此类操作执行表锁定。
例如,如果您要进行多次更新或并发插入,则表级锁的效率非常低,而 InnoDB 表上的更新使用行级锁,因此允许并发操作。
除此之外,InnoDB 允许使用对维护数据模型的引用完整性至关重要的外键,支持事务。
简而言之,使用 InnoDB 因为
所有这些优势都远远超过了选择速度的下降。
选择取决于各种因素。在您的特定情况下,由于您需要关系设计,因此您必须使用 InnoDB。
一个简短的总结:
MyISAM
恢复数据时通常速度更快。
没有原子性特征,因为它不需要检查引用完整性,也不需要锁定表来执行操作,这就像前面几点一样,让我们的速度更快。
InnoDB
它允许具有 ACID 特性(原子性、一致性、隔离性和持久性:西班牙语中的原子性、一致性、隔离性和持久性),保证我们表格的完整性。
数据完整性,当使用 INSERT、DELETE 或 UPDATE 语句修改内容时,存储数据的完整性可能会以多种不同的方式丢失。
InnoDB 从意外的系统错误中恢复或从其日志重新启动,而 MyISAM 需要对尚未刷新到磁盘的表数据进行扫描、修复和索引重建。
此外,如果我们的应用程序大量使用 INSERT 和 UPDATE,我们可能会注意到 MyISAM 的性能提升。
一些感兴趣的链接:
今天使用 MyISAM,我看到的关于 innodb 的唯一区别是您可以在(非常长的)文本字段中进行查询,引用其中包含的单词,例如您可以保存一个完整的段落,并说您带来了记录在段落中包含“head”一词,它将带来它们,即它管理文本类型字段的方式,否则我总是使用innodb,在他们上面回答你之前有一定的限制。我会在一个表中使用 MyISAM,该表存储例如一本书的序言在它的一个字段或类似的东西中,并且需要使其成为搜索参数。