136

MyISAM 的设计理念是您的数据库被查询的次数远远超过其更新次数,因此它执行非常快速的读取操作。如果您的读写(插入|更新)比率小于 15%,则最好使用 MyISAM。

InnoDB 使用行级锁定,具有提交、回滚和崩溃恢复功能来保护用户数据。它支持事务和容错

MyISAM 和 InnobDB 之间的上述差异是否正确?如果 MISAM 和 InnobDB 有任何其他限制,请指导。我什么时候应该使用 MyiSAM 或 Innodb?谢谢!

4

2 回答 2

237

阅读有关存储引擎的信息。

MyISAM:

MySQL 中的MyISAM存储引擎。

  • 设计和创建更简单,因此更适合初学者。不用担心表之间的外部关系。
  • 由于结构更简单,因此总体上比 InnoDB 更快,因此服务器资源的成本要低得多。——大部分不再正确。
  • 全文索引。-- InnoDB 现在有了
  • 特别适用于读取密集型(选择)表。——大部分不再正确。
  • 磁盘占用空间比 InnoDB 少 2 到 3 倍。-- 从 5.7 版开始,这可能是 MyISAM 唯一真正的优势。

InnoDB:

MySQL 中的InnoDB存储引擎。

  • 支持事务(为您提供对ACID属性的支持)。
  • 行级锁定。与例如MyISAM相比,拥有更细粒度的锁定机制可以为您提供更高的并发性。
  • 外键约束。让你让数据库保证数据库状态的完整性,以及表之间的关系。
  • InnoDB 比 MyISAM 更能抵抗表损坏。
  • 支持数据和索引的大型缓冲池。MyISAM 密钥缓冲区仅用于索引。
  • MyISAM 停滞不前;所有未来的增强都将在 InnoDB 中。随着 8.0 版的推出,这一点变得非常清楚。

MyISAM 限制:

  • 没有外键和级联删除/更新
  • 没有事务完整性(ACID 合规性)
  • 没有回滚能力
  • 4,284,867,296 行限制 (2^32) - 这是旧的默认值。可配置的限制(对于许多版本)是 2**56 字节。
  • 每个表最多 64 个索引

InnoDB 限制:

  • 无全文索引(mysql 5.6以下版本)
  • 无法压缩以实现快速、只读(5.5.14 引入ROW_FORMAT=COMPRESSED
  • 您无法修复 InnoDB 表

如需简要了解,请阅读以下链接:

  1. MySQL 引擎:InnoDB 与 MyISAM – 优缺点比较
  2. MySQL 引擎:MyISAM 与 InnoDB
  3. InnoDB 和 MyISAM 之间的主要区别是什么?
  4. MyISAM 与 InnoDB
  5. MyISAM 和 InnoDB 有什么区别?
  6. MySql:MyISAM 与 Inno DB!
于 2013-03-28T09:48:11.223 回答
20

将 MyISAM 用于非常不重要的数据,或者如果您确实需要那些最小的性能优势。MyISAM 的读取性能并非在每种情况下都更好。

我个人再也不会使用 MyISAM 了。如果您需要更高的性能,请选择 InnoDB 并投入更多的硬件。另一个想法是查看具有更多功能的数据库系统,例如 PostgreSQL(如果适用)。

编辑:对于读取性能,此链接显示 innoDB 实际上并不比 MyISAM 慢:https ://www.percona.com/blog/2007/01/08/innodb-vs-myisam-vs-falcon-benchmarks -第1部分/

于 2013-03-28T09:44:23.887 回答