MySQL存儲引擎的選擇

記得一年多前在爲咱們的產品選擇MySQL的存儲引擎時——InnoDB和MyISAM之間,費了好大的功夫,從網絡和一些書籍中收集了不少資料來論證,最終咱們以究竟是讀多寫少仍是寫多讀少這個廣泛觀點當作決定條件選擇了InnoDB。前些日子在閱讀了《高性能MySQL》(第三版,這一版由淘寶的DBA翻譯,我我的感受質量很是好)以後,書中對存儲引擎的選擇有着更權威更系統的回答,下面我就循着書籍來給你們總結一下咱們耳熟能詳的兩個存儲引擎InnoDB和MyISAM在產品中如何選擇。安全


先看書中這麼幾句話:「大部分狀況下,InnoDB都是正確的選擇 ; 除非要用到某些InnoDB不具有的特性,而且沒有其餘辦法能夠替代,不然都應該優先選擇InnoDB引擎」,好比這個例子,若是要用到全文索引,建議先考慮InnoDB加上Sphinx的組合,而不是使用支持全文索引的MyISAM。網絡

InnoDB的一些特性ide

  • 事務支持:若是應用須要事務支持,那麼InnoDB是目前最穩定而且是通過驗證的選擇;性能

  • 備份:若是須要在線熱備份,選擇InnoDB就是基本的要求;翻譯

  • 崩潰恢復:相對而言,MyISAM崩潰後發生損壞的機率比InnoDB要高不少,並且恢復速度也慢。所以,即便不須要事務支持,不少人也會選擇InnoDB。InnoDB還支持真正的熱備份;設計

  • 鎖粒度:InnoDB支持的是行級鎖;日誌

MyISAM的一些特性索引

  • 鎖粒度:表級鎖,讀取時會對操做表加共享鎖,寫入時則加排它鎖;事務

  • 修復:支持手工或者自動執行檢查的修復操做。可是修復可能會致使一些數據丟失,並且修復操做很慢;get

  • 索引特性:支持全文索引;

  • 延遲更新索引鍵:提高了寫入性能下降了安全性;

  • MyISAM引擎設計簡單,數據以緊密格式存儲,因此在某些場景下性能很好;

前面我說的之前選擇MySQL到底是採用的InnoDB仍是MyISAM存儲引擎主要看應用場景是「讀多寫少仍是仍是寫多讀少」,若是是前者就採用MyISAM,後者就採用InnoDB。書中也有建議「對於只讀或者大部分狀況下只讀的表,若是不介意MyISAM的崩潰恢復問題,選用它是合適的。可是仍然給咱們提了個醒:MyISAM引擎在一開始可能沒有任何問題,但隨着應用壓力的上升,則可能迅速惡化。各類鎖爭用、崩潰後的數據丟失等問題都會隨之而來。

從上面的分析和建議來看,之於InnoDB引擎,彷彿MyISAM缺點多多。可是其存在就有其意義,對於日誌型應用,CD-ROM的應用(MyISAM的壓縮表)...選用MyISAM是很是適合的。

以上就是我結合《高性能MySQL》這本書籍對兩個經常使用存儲引擎選擇的總結,書中全篇都在講如何合適,更高效的使用MySQL,建議感興趣的朋友進行全面閱讀,爲本身的應用搭建起高效健壯的數據中心。

相關文章
相關標籤/搜索