MyISAM 是MySQL中默認(rèn)的存儲引擎,一般來說不是有太多人關(guān)心這個東西。決定使用什么樣的存儲引擎是一個很tricky的事情,但是還是值我們?nèi)パ芯恳幌?,這里的文章只考慮 MyISAM 和InnoDB這兩個,因為這兩個是最常見的。
創(chuàng)新互聯(lián)公司堅持“要么做到,要么別承諾”的工作理念,服務(wù)領(lǐng)域包括:成都網(wǎng)站設(shè)計、網(wǎng)站制作、企業(yè)官網(wǎng)、英文網(wǎng)站、手機端網(wǎng)站、網(wǎng)站推廣等服務(wù),滿足客戶于互聯(lián)網(wǎng)時代的四川網(wǎng)站設(shè)計、移動媒體設(shè)計的需求,幫助企業(yè)找到有效的互聯(lián)網(wǎng)解決方案。努力成為您成熟可靠的網(wǎng)絡(luò)建設(shè)合作伙伴!
下面先讓我們回答一些問題:
你的數(shù)據(jù)庫有外鍵嗎?
你需要事務(wù)支持嗎?
你需要全文索引嗎?
你經(jīng)常使用什么樣的查詢模式?
你的數(shù)據(jù)有多大?
思考上面這些問題可以讓你找到合適的方向,但那并不是絕對的。如果你需要事務(wù)處理或是外鍵,那么InnoDB 可能是比較好的方式。如果你需要全文索引,那么通常來說 MyISAM是好的選擇,因為這是系統(tǒng)內(nèi)建的,然而,我們其實并不會經(jīng)常地去測試兩百萬行記錄。所以,就算是慢一點,我們可以通過使用Sphinx從InnoDB中獲得全文索引。
數(shù)據(jù)的大小,是一個影響你選擇什么樣存儲引擎的重要因素,大尺寸的數(shù)據(jù)集趨向于選擇InnoDB方式,因為其支持事務(wù)處理和故障恢復(fù)。數(shù)據(jù)庫的在小決定了故障恢復(fù)的時間長短,InnoDB可以利用事務(wù)日志進(jìn)行數(shù)據(jù)恢復(fù),這會比較快。而MyISAM可能會需要幾個小時甚至幾天來干這些事,InnoDB只需要幾分鐘。
您操作數(shù)據(jù)庫表的習(xí)慣可能也會是一個對性能影響很大的因素。比如: COUNT() 在 MyISAM 表中會非???,而在InnoDB 表下可能會很痛苦。而主鍵查詢則在InnoDB下會相當(dāng)相當(dāng)?shù)目?,但需要小心的是如果我們的主鍵太長了也會導(dǎo)致性能問題。大批的inserts 語句在MyISAM下會快一些,但是updates 在InnoDB 下會更快一些——尤其在并發(fā)量大的時候。
所以,到底你檢使用哪一個呢?根據(jù)經(jīng)驗來看,如果是一些小型的應(yīng)用或項目,那么MyISAM 也許會更適合。當(dāng)然,在大型的環(huán)境下使用MyISAM 也會有很大成功的時候,但卻不總是這樣的。如果你正在計劃使用一個超大數(shù)據(jù)量的項目,而且需要事務(wù)處理或外鍵支持,那么你真的應(yīng)該直接使用InnoDB方式。但需要記住InnoDB 的表需要更多的內(nèi)存和存儲,轉(zhuǎn)換100GB 的MyISAM 表到InnoDB 表可能會讓你有非常壞的體驗。