參考文章 : InnoDB還是MyISAM 再談MySQL儲存引擎的選擇 MySQL: InnoDB 還是 MyISAM?
MyISAM:這個是預設類型,它是基於傳統的ISAM類型,ISAM是Indexed Sequential Access Method (有索引的順序存取方法) 的縮寫,它是儲存記錄和檔案的標準方法.與其他儲存引擎比較,MyISAM具有檢查和修複表格的大多數工具. MyISAM表格可以被壓縮,而且它們支援全文檢索搜尋.它們不是事務安全的,而且也不支援外鍵。如果事物復原將造成不完全復原,不具有原子性。如果執行大量的SELECT,MyISAM是更好的選擇。
InnoDB:這種類型是事務安全的.它與BDB類型具有相同的特性,它們還支援外鍵.InnoDB表格速度很快.具有比BDB還豐富的特性, 因此如果需要一個事務安全的儲存引擎,建議使用它.如果你的資料執行大量的INSERT或UPDATE,出於效能方面的考慮,應該使用InnoDB表,
兩種類型最主要的差別就是Innodb 支援交易處理與外鍵和行級鎖.而MyISAM不支援.所以MyISAM往往就容易被人認為只適合在小項目中使用。
如何確定使用哪種類型:
下面先讓我們回答一些問題:
- 你的資料庫有外鍵嗎?
- 你需要事務支援嗎?
- 你需要全文索引嗎?
- 你經常使用什麼樣的查詢模式?
- 你的資料有多大?
思考上面這些問題可以讓你找到合適的方向,但那並不是絕對的。如果你需要交易處理或是外鍵,那麼InnoDB 可能是比較好的方式。如果你需要全文索引,那麼通常來說 MyISAM是好的選擇,因為這是系統內建的,然而,我們其實並不會經常地去測試兩百萬行記錄。所以,就算是慢一點,我們可以通過使用Sphinx從InnoDB中獲得全文索引。
資料的大小,是一個影響你選擇什麼樣儲存引擎的重要因素,大尺寸的資料集趨向於選擇InnoDB方式,因為其支援交易處理和故障恢複。資料庫的在小決定了故障恢複的時間長短,InnoDB可以利用交易記錄進行資料恢複,這會比較快。而MyISAM可能會需要幾個小時甚至幾天來幹這些事,InnoDB只需要幾分鐘。
您操作資料庫表的習慣可能也會是一個對效能影響很大的因素。比如: COUNT() 在 MyISAM 表中會非常快,而在InnoDB 表下可能會很痛苦。而主鍵查詢則在InnoDB下會相當相當的快,但需要小心的是如果我們的主鍵太長了也會導致效能問題。大批的inserts 語句在MyISAM下會快一些,但是updates 在InnoDB 下會更快一些——尤其在並發量大的時候。
所以,到底你檢使用哪一個呢?根據經驗來看,如果是一些小型的應用或項目,那麼MyISAM 也許會更適合。當然,在大型的環境下使用MyISAM 也會有很大成功的時候,但卻不總是這樣的。如果你正在計劃使用一個超大資料量的項目,而且需要交易處理或外鍵支援,那麼你真的應該直接使用InnoDB方式。但需要記住InnoDB 的表需要更多的記憶體和儲存,轉換100GB 的MyISAM 表到InnoDB 表可能會讓你有非常壞的體驗。