MySQL存储引擎的选择
記得一年多前在為我們的產品選擇MySQL的存儲引擎時——InnoDB和MyISAM之間,費了好大的功夫,從網絡和一些書籍中收集了很多資料來論證,最終我們以到底是讀多寫少還是寫多讀少這個普遍觀點當做決定條件選擇了InnoDB。前些日子在閱讀了《高性能MySQL》(第三版,這一版由淘寶的DBA翻譯,我個人感覺質量非常好)之后,書中對存儲引擎的選擇有著更權威更系統的回答,下面我就循著書籍來給大家總結一下我們耳熟能詳的兩個存儲引擎InnoDB和MyISAM在產品中如何選擇。
先看書中這么幾句話:“大部分情況下,InnoDB都是正確的選擇 ; 除非要用到某些InnoDB不具備的特性,并且沒有其他辦法可以替代,否則都應該優先選擇InnoDB引擎”,比如這個例子,如果要用到全文索引,建議先考慮InnoDB加上Sphinx的組合,而不是使用支持全文索引的MyISAM。
InnoDB的一些特性
事務支持:如果應用需要事務支持,那么InnoDB是目前最穩定并且是經過驗證的選擇;
備份:如果需要在線熱備份,選擇InnoDB就是基本的要求;
崩潰恢復:相對而言,MyISAM崩潰后發生損壞的概率比InnoDB要高很多,而且恢復速度也慢。因此,即使不需要事務支持,很多人也會選擇InnoDB。InnoDB還支持真正的熱備份;
鎖粒度:InnoDB支持的是行級鎖;
MyISAM的一些特性
鎖粒度:表級鎖,讀取時會對操作表加共享鎖,寫入時則加排它鎖;
修復:支持手工或者自動執行檢查的修復操作。但是修復可能會導致一些數據丟失,而且修復操作很慢;
索引特性:支持全文索引;
延遲更新索引鍵:提升了寫入性能降低了安全性;
MyISAM引擎設計簡單,數據以緊密格式存儲,所以在某些場景下性能很好;
前面我說的以前選擇MySQL究竟是采用的InnoDB還是MyISAM存儲引擎主要看應用場景是“讀多寫少還是還是寫多讀少”,如果是前者就采用MyISAM,后者就采用InnoDB。書中也有建議“對于只讀或者大部分情況下只讀的表,如果不介意MyISAM的崩潰恢復問題,選用它是合適的。但是仍然給我們提了個醒:MyISAM引擎在一開始可能沒有任何問題,但隨著應用壓力的上升,則可能迅速惡化。各種鎖爭用、崩潰后的數據丟失等問題都會隨之而來。
從上面的分析和建議來看,之于InnoDB引擎,仿佛MyISAM缺點多多。但是其存在就有其意義,對于日志型應用,CD-ROM的應用(MyISAM的壓縮表)...選用MyISAM是非常適合的。
以上就是我結合《高性能MySQL》這本書籍對兩個常用存儲引擎選擇的總結,書中全篇都在講如何合適,更高效的使用MySQL,建議感興趣的朋友進行全面閱讀,為自己的應用搭建起高效健壯的數據中心。
轉載于:https://blog.51cto.com/yaocoder/1330399
總結
以上是生活随笔為你收集整理的MySQL存储引擎的选择的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 为嵌入式对象(值对象)加校验
- 下一篇: 将不确定变为确定~transaction