淺談MySQL存儲引擎選擇 InnoDB還是MyISAM
51CTO推薦專題:MySQL入門與精通 PHP+MySQL視頻教程
MyISAM 是MySQL中默認(rèn)的存儲引擎,一般來說不是有太多人關(guān)心這個東西。決定使用什么樣的存儲引擎是一個很tricky的事情,但是還是值我們?nèi)パ芯恳幌拢@里的文章只考慮 MyISAM 和InnoDB這兩個,因為這兩個是最常見的。
下面先讓我們回答一些問題:
◆你的數(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ù)目欤枰⌒牡氖侨绻覀兊闹麈I太長了也會導(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 表可能會讓你有非常壞的體驗。
【編輯推薦】