使用InnoDB和MyISAM表的组合

13

我有2个表格,希望更加健壮,幸运的是不需要频繁快速地填充数据和检查。所有其他的表都不可避免地使用MyISAM引擎。

如果我同时使用这两种引擎(我已经读了一些反对意见),是否可以安全地使用而不担心错误或数据受到引擎之间差异的影响?

2个回答

25

你可以这样做,但是会带来许多不利因素:

  • 你的服务器调优将不可避免地变成妥协——你不能将所有内存用于MyISAM或InnoDB(注:如果它们在不同的服务器上,则不适用此限制)
  • 在某些边缘情况下,复制会失败,因为如果你有一个包含对某些MyISAM表更改的失败事务,它既不能正确提交,也无法回滚
  • 你仍然无法使用MVCC备份你的服务器,因为你仍然无法获得MyISAM表的一致快照

所以基本上,我鼓励你完全转向InnoDB。然后你就可以忘记MyISAM并不再将资源用于它,同时获得使用InnoDB的全部好处。任何认为MyISAM更快的人要么没有正确调优InnoDB,要么他们的数据太小了而无需考虑。

MyISAM能够更快地扫描表,但如果你在大表上进行这些操作,那么你会遇到更大的问题。


很好的回答MarkR,我想知道在哪些“边缘情况”下混合InnoDB/MyIsam数据库的复制可能会失败?只有使用影响InnoDB和MyIsam表的事务吗?您认为在任何其他情况下都是安全的吗?谢谢。 - Filippo Vitale
如果在主服务器上发生涉及MyISAM和InnoDB表的事务,成功提交并记录到二进制日志中,然后在从服务器上,其中的InnoDB部分由于死锁而失败,则该事务将被重试。但是,事务中的MyISAM部分无法回滚,因此从服务器将不得不重复执行它(并希望不会发生任何不良情况)-但是可能会发生不良情况,并且整个从服务器会出现故障(复制停止直到手动干预)。还有很多其他情况,这只是我刚刚想出来的一个例子。 - MarkR

11

可以。

请注意,只有 InnoDB 表支持事务和 FOREIGN KEY 关系。


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