【问题标题】:When to use MyISAM and InnoDB? [duplicate]何时使用 MyISAM 和 InnoDB? [复制]
【发布时间】:2013-03-18 16:31:18
【问题描述】:

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

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

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

【问题讨论】:

  • 场景很少。 1. 如果要使用全文搜索,请使用 MISAM。 2.如果要在表中使用关系约束,请使用INNODB。
  • 为什么不查看右侧名为“相关”的列?
  • 为什么要对这个明显重复且即将结束的问题投赞成票?
  • @Neo Mysql 5.6 也支持 InnoDB 全文搜索
  • @AdvaitAmin 不,先生。感谢您的帮助。

标签: mysql database database-schema


【解决方案1】:

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

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

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

【讨论】:

  • “将 MyISAM 用于非常不重要的数据”夸大了可靠性差异,尤其是在使用现代日志文件系统时。更普遍的看法是 MyISAM 的读取速度更快。我不明白为什么 Percona 博客的结果是个例外。我们使用两种引擎对我们的表进行了实验,发现 MyISAM 读取速度通常几乎是 InnoDB 的两倍。尽可能使用您自己的真实数据和环境进行测试总是最好的。
  • @orrd 你是对的,只有使用自己的数据进行测试才能显示性能影响。我的实验表明,在大多数只读情况下几乎没有区别,当定期发生写入时,myisam 往往会遇到真正的问题,所以在我目前使用的所有用例中,innodb 都好得多
  • 指向博客条目的链接现在大约有 10 年历史了。
  • 不只是两倍快,在我们的测试中,我们的查找速度提高了 80 倍,遗憾的是它对于写入密集型应用程序没有得到改进。
【解决方案2】:

了解Storage Engines

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 Engines: InnoDB vs. MyISAM – A Comparison of Pros and Cons
  2. MySQL Engines: MyISAM vs. InnoDB
  3. What are the main differences between InnoDB and MyISAM?
  4. MyISAM versus InnoDB
  5. What's the difference between MyISAM and InnoDB?
  6. MySql: MyISAM vs. Inno DB!

【讨论】:

  • 全文索引在 MySQL 5.6 的 InnoDB 中可用
  • 您没有列出 MyISAM 的好处。
  • @Perception 在下面的链接中添加 MyISAM 描述和所有内容。
  • 关于从 MyISAM 转换到 InnoDB,请参阅 myisam2innodb blog
  • InnoDB 在 MySQL 5.7 中也有一个限制,即每个表最多有 64 个索引。
猜你喜欢
  • 1970-01-01
  • 2011-08-26
  • 2012-09-18
  • 2012-05-15
  • 2011-07-25
  • 2014-10-14
  • 2012-03-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多