2009-12-24 96 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