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