我应该为我的表切换到 InnoDB 吗?

Should I switch to InnoDB for my tables

我有一个基于 PHP 的 API 运行 在共享主机上并使用 MySQL。我一直在阅读 InnoDB 与 MyISAM 的对比,并想粘贴一些关于我的 API 数据库的具体内容,以确保继续使用 InnoDB 是有意义的。这些表默认设置了 MyISAM,所以我没有刻意选择那个数据库引擎。

  1. 我的查询写入次数多于读取次数(我想是 70% 的写入次数)。 Reads/lookups 总是由 "foreign key"(用户标识)(我知道 MyISAM 没有这些限制)但可能很高兴知道我是否移动,因为我可以利用它。
  2. 我不进行全文搜索
  3. 我的数据对我很重要,我最近了解到 MyISAM 有丢失数据的风险?过去有几次我丢失了一些数据,并假设这是我的用户与 API 交互方式的错误。也许不是?我很困惑为什么有人会接受丢失数据并因此选择 MyISAM,所以也许我对 MyISAM 的了解不够。
  4. 我在共享主机上,他们确认我无权更改 my.cnf 中的设置、更改缓冲区、线程、并发设置等
  5. 我以后可能会改用DigitalOcean或AWS
  6. 我的托管公司使用 MySQL 版本是 14.14 分发:5.6.34

基于这些因素,我的直觉是将我所有的表都切换到 InnoDB,至少看看是否有问题。如果遇到问题,我可以 运行 相同的语句,但将 InnoDB 与 MyISAM 交换以恢复原状。

非常感谢。

简短回答:是的! MyISAM 是 MySQL 的原始格式,但很多年前 InnoDB 已被首选,原因有很多。在高级图片上,您的应用程序将更好地执行,因为 InnoDB 具有更好的锁管理。

您可以在此处找到对您的问题的更长回答 以及以下 2 篇有关从 MyISAM 迁移到 InnoDB 的文章:

https://dba.stackexchange.com/questions/167842/can-converting-myisam-to-innodb-cause-problems

https://kinsta.com/knowledgebase/convert-myisam-to-innodb/