似乎我需要与MySQL进行交易,我不知道如何使用混合的InnoDB / MyISAM表管理Mysql中的事务,这看起来像是一团糟。
你可能会问我为什么要把这些桌子混在一起......这就是性能。正如许多开发人员所注意到的那样,InnoDB表通常性能不佳,但作为回报,它会提供更高的隔离级别等......
有没有人对此问题有任何建议?
答案 0 :(得分:6)
我认为你高估了MyISAM和InnoDB之间的性能差异。 MyISAM在数据仓库情况下更快(例如全表扫描报告等),但在许多情况下,InnoDB实际上可以通过正常的OLTP查询更快。
InnoDB由于具有更多旋钮而更难调整,但由于更好的锁定和更好的I / O模式,正确调整的InnoDB系统通常比MyISAM具有更高的吞吐量。
答案 1 :(得分:2)
鉴于您无法在MyISAM表中进行交易,我不确定实际问题是什么。您需要事务的任何数据必须位于InnoDB表中,并且您使用您正在使用的任何访问库或使用手动SQL命令来管理事务。
答案 2 :(得分:0)
使用一个引擎确实有一定的性能优势。
针对一个引擎调整的服务器将不会针对另一个引擎进行调整 - 两者都要求您为其独占使用分配大量RAM - 因此,您无法为它们提供最佳数量。
假设您的(显然是64位,但仍然相对较小)数据库服务器上有8G内存,您可能需要将大约3/4的内容分配给您的innodb页面缓存。或者,如果您正在使用MyISAM,您可能希望其中一半是您的key_buffer。你不能两者都做。
选择引擎并专门使用它。有一些方法可以解决性能问题 - 但大多数问题并不容易(即需要重新设计数据结构或应用程序)。
答案 3 :(得分:0)
简短的回答是MyISAM中没有交易支持。如果启动事务,在某些InnoDB表中添加或修改数据,在MyISAM表中添加或修改数据,然后必须回滚,则无法删除MyISAM更改。为了支持这样的混合引擎,您的应用程序必须知道对存储的任何数据的更改MyISAM发生在事务的“外部”。
如果您需要某些进程的事务,请隔离必须可处理的数据,并将所有数据放入InnoDB中。