我应该将我的数据库从MyISAM更改为InnoDB吗?(AWS通知)

3
我正在开发一个浏览器应用程序,通过php站点连接到多个MySQL数据库。这些数据库设置在单个AWS RDS实例上。当我设置这些数据库时,我并没有很好地了解不同的db引擎。阅读了不同类型的介绍后,我决定在对IOPS需求较低的情况下使用InnoDB,在对IOPS需求较高的情况下使用MyISAM,因为我读到它在某些任务中速度更快。
Amazon Web Services告诉我:
DB实例test-1包含未迁移到InnoDB的MyISAM表。这些表可能会影响您执行恢复到指定时间点的能力。请考虑将这些表转换为InnoDB。请参阅http://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/Overview.BackingUpAndRestoringAmazonRDSInstances.html#Overview.BackupDeviceRestrictions 我应该重新创建使用InnoDB的MyISAM数据库吗?

如果您需要大量数据吞吐量,那么MyISAM更快的事实只有在这种情况下才真正相关 - 对于大多数执行典型Web应用程序工作负载的CRUD应用程序来说,使用InnoDB会更好,因为它具有更强的弹性和更丰富的功能集。 - Dai
1个回答

6
MyISAM比InnoDB更快的说法是从2000年代中期的代码遗留下来的。对于大多数类型的查询,MyISAM现在不再比InnoDB更快。可以查看此博客中的基准测试结果(2007年):https://www.percona.com/blog/2007/01/08/innodb-vs-myisam-vs-falcon-benchmarks-part-1/
自那以后,InnoDB变得更好、更快、更可靠了,而MyISAM则没有进行开发。在MySQL 8.0中,甚至系统表也已转换为InnoDB。显然有意将MyISAM逐步淘汰。我预计它将被弃用,然后在未来的MySQL版本中被移除(但我不能确定需要多少年时间)。
虽然有一些特殊情况下,例如表扫描,MyISAM可能会更快,但你真的不应该为表扫描优化数据库。你应该创建正确的索引来避免表扫描。
更新:2018年2月,MyISAM由于最近修复Meltdown CPU漏洞而受到额外的40%性能损失,这影响了表扫描。假设你负责并修补了系统以修复Meltdown漏洞,那么MyISAM现在是一个性能负担。请查看使用该补丁的当前MyISAM性能测试:https://mariadb.org/myisam-table-scan-performance-kpti/
但是,比这更重要的是InnoDB支持ACID行为,而MyISAM不支持ACID的任何四个特性之一。请参见我的回答:MyISAM versus InnoDB
不支持ACID并不仅仅是一个学术问题。它会导致更新期间的表锁定以及备份期间的全局锁定等问题。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接