淺談MySQL存儲引擎選擇 InnoDB仍是MyISAM

 

若是是一些小型的應用或項目,那麼MyISAM 也許會更適合。固然,在大型的環境下使用MyISAM 也會有很大成功的時候,但卻不老是這樣的。若是你正在計劃使用一個超大數據量的項目,那麼你應該直接使用InnoDB方式。數據庫

 

MyISAM 是MySQL中默認的存儲引擎,通常來講不是有太多人關心這個東西。決定使用什麼樣的存儲引擎是一個很tricky的事情,可是仍是值咱們去研究一下,這裏的文章只考慮 MyISAM 和InnoDB這兩個,由於這兩個是最多見的。併發

下面先讓咱們回答一些問題:
◆你的數據庫有外鍵嗎? 
◆你須要事務支持嗎? 
◆你須要全文索引嗎? 
◆你常常使用什麼樣的查詢模式? 
◆你的數據有多大? 性能

思考上面這些問題可讓你找到合適的方向,但那並非絕對的。若是你須要事務處理或是外鍵,那麼InnoDB 多是比較好的方式。若是你須要全文索引,那麼一般來講 MyISAM是好的選擇,由於這是系統內建的,然而,咱們其實並不會常常地去測試兩百萬行記錄。因此,就算是慢一點,咱們能夠經過使用Sphinx從InnoDB中得到全文索引。測試

數據的大小,是一個影響你選擇什麼樣存儲引擎的重要因素,大尺寸的數據集趨向於選擇InnoDB方式,由於其支持事務處理和故障恢復。數據庫的在小決定了故障恢復的時間長短,InnoDB能夠利用事務日誌進行數據恢復,這會比較快。而MyISAM可能會須要幾個小時甚至幾天來幹這些事,InnoDB只須要幾分鐘。大數據

您操做數據庫表的習慣可能也會是一個對性能影響很大的因素。好比: COUNT() 在 MyISAM 表中會很是快,而在InnoDB 表下可能會很痛苦。而主鍵查詢則在InnoDB下會至關至關的快,但須要當心的是若是咱們的主鍵太長了也會致使性能問題。大批的inserts 語句在MyISAM下會快一些,可是updates 在InnoDB 下會更快一些——尤爲在併發量大的時候。spa

因此,到底你檢使用哪個呢?根據經驗來看,若是是一些小型的應用或項目,那麼MyISAM 也許會更適合。固然,在大型的環境下使用MyISAM 也會有很大成功的時候,但卻不老是這樣的。若是你正在計劃使用一個超大數據量的項目,並且須要事務處理或外鍵支持,那麼你真的應該直接使用InnoDB方式。但須要記住InnoDB 的表須要更多的內存和存儲,轉換100GB 的MyISAM 表到InnoDB 表可能會讓你有很是壞的體驗。日誌

轉:http://database.51cto.com/art/200905/124370.htmhtm

相關文章
相關標籤/搜索