2009-12-24 94 views
13

我有2个表格,我希望更健壮,幸运的是不需要经常快速填写数据和检查。所有其他表格将不可避免地为MyISAM。使用InnoDB和MyIsam表的组合

我可以安全地同时使用两种(我已经读过一些令人灰心的问题),而不用担心引擎之间的差异会影响错误或数据?

回答

11

是的,你可以。

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

26

你可以,但此介绍一些缺点:

  • 你的服务器调整现在一定是一个妥协 - 你不能使用所有的内存无论的MyISAM或InnoDB的(注意:这不,如果他们申请在不同的服务器上)
  • 复制在许多边缘情况下失败,因为如果你有一个失败的事务包含一些MyISAM表的更改,它既不能正确提交它,也不能将它回滚
  • 你仍然可以'使用MVCC备份您的服务器,因为您仍然没有获得MyISAM t的一致快照ables

所以基本上,我鼓励你完全切换到InnoDB。那么你几乎可以忘记MyISAM,并且不会投入资源,并且可以充分利用InnoDB。任何认为MyISAM速度更快的人都不是要正确调整InnoDB,要么是关心的小数据。

MyISAM可以实现更快的表扫描,但是如果您在大型表上执行这些扫描,则会出现更大的问题。

+0

不错的答案MarkR,我想知道在哪种“边缘情况下”混合InnoDB/MyIsam数据库的复制可能会失败?只使用影响InnoDB和MyIsam表的事务?你认为在其他情况下安全吗?谢谢 – 2012-01-23 00:44:26

+0

如果在涉及MyISAM和innodb表的master上发生事务,则提交成功提交,然后在slave上,它的InnoDB部分因死锁而失败,事务将被重试。然而,事务的MyISAM部分不能被回滚,所以从服务器将不得不重复它(并且希望没有什么不好的事情发生) - 但是会发生一些不好的事情,并且整个从服务器被破坏(复制停止直到手动干预) 。还有很多其他案例,这是我刚发明的一个例子。 – MarkR 2012-01-23 11:33:28