雖然MySQL里的存儲(chǔ)引擎不只是MyISAM與InnoDB這兩個(gè)腌且,但常用的就是它倆了¢晃停可能有站長(zhǎng)并未注意過(guò)MySQL的存儲(chǔ)引擎铺董,其實(shí)存儲(chǔ)引擎也是數(shù)據(jù)庫(kù)設(shè)計(jì)里的一大重要點(diǎn),那么博客系統(tǒng)應(yīng)該使用哪種存儲(chǔ)引擎呢禀晓?
下面我們分別來(lái)看兩種存儲(chǔ)引擎的區(qū)別精续。
InnoDB支持事務(wù),MyISAM不支持粹懒。
這一點(diǎn)是非常之重要重付。事務(wù)是一種高級(jí)的處理方式,如在一些列增刪改中只要哪個(gè)出錯(cuò)還可以回滾還原凫乖,而MyISAM就不可以了确垫。InnoDB支持外鍵弓颈,MyISAM不支持
MyISAM適合查詢以及插入為主的應(yīng)用,InnoDB適合頻繁修改以及涉及到安全性較高的應(yīng)用
四删掀、MyISAM是默認(rèn)引擎翔冀,InnoDB需要指定
五、InnoDB過(guò)去不支持FULLTEXT類型的索引披泪,現(xiàn)在纤子,MySQL 5.6.4里添加了InnoDB引擎的 Full-Text索引支持 。
六款票、InnoDB中不保存表的行數(shù)控硼,如select count() from table時(shí),InnoDB需要掃描一遍整個(gè)表來(lái)計(jì)算有多少行艾少,但是MyISAM只要簡(jiǎn)單的讀出保存好的行數(shù)即可卡乾。注意的是,當(dāng)count()語(yǔ)句包含where條件時(shí)MyISAM也需要掃描整個(gè)表
七缚够、對(duì)于自增長(zhǎng)的字段说订,InnoDB中必須包含只有該字段的索引,但是在MyISAM表中可以和其他字段一起建立聯(lián)合索引
八潮瓶、清空整個(gè)表時(shí)陶冷,InnoDB是一行一行的刪除,效率非常慢毯辅。MyISAM則會(huì)重建表
九埂伦、InnoDB支持行鎖(某些情況下還是鎖整表,如 update table set a=1 where user like '%lee%'
- 如果你的應(yīng)用程序?qū)Σ樵冃阅芤筝^高思恐,就要使用MYISAM了沾谜。MYISAM索引和數(shù)據(jù)是分開(kāi)的,而且其索引是壓縮的胀莹,可以更好地利用內(nèi)存基跑。所以它的查詢性能明顯優(yōu)于INNODB。壓縮后的索引也能節(jié)約一些磁盤(pán)空間描焰。MYISAM擁有全文索引的功能媳否,這可以極大地優(yōu)化LIKE查詢的效率。
通過(guò)以上區(qū)別荆秦,結(jié)合個(gè)人博客的特點(diǎn)篱竭,推薦個(gè)人博客系統(tǒng)使用MyISAM,因?yàn)樵诓┛屠镏饕僮魇亲x取和寫(xiě)入步绸,很少有鏈?zhǔn)讲僮鞑舯啤K赃x擇MyISAM引擎使你博客打開(kāi)也頁(yè)面的效率要高于InnoDB引擎的博客,當(dāng)然只是個(gè)人的建議瓤介,大多數(shù)博客還是根據(jù)實(shí)際情況下謹(jǐn)慎選擇
有人說(shuō)MYISAM只能用于小型應(yīng)用吕喘,其實(shí)這只是一種偏見(jiàn)赘那。如果數(shù)據(jù)量比較大,這是需要通過(guò)升級(jí)架構(gòu)來(lái)解決氯质,比如分表分庫(kù)漓概,而不是單純地依賴存儲(chǔ)引擎。
其他一些說(shuō)法:
現(xiàn)在一般都是選用innodb了病梢,主要是myisam的全表鎖,讀寫(xiě)串行問(wèn)題梁肿,并發(fā)效率鎖表蜓陌,效率低myisam對(duì)于讀寫(xiě)密集型應(yīng)用一般是不會(huì)去選用的。
關(guān)于Mysql數(shù)據(jù)庫(kù)默認(rèn)的存儲(chǔ)引擎:
MyISAM和InnoDB是MySQL的兩種存儲(chǔ)引擎吩蔑。如果是默認(rèn)安裝钮热,那就應(yīng)該是InnoDB,你可以在my.ini文件中找到default-storage-engine=INNODB烛芬;當(dāng)然你可以在建表時(shí)指定相應(yīng)的存儲(chǔ)引擎隧期。通過(guò)show create table xx 可以看見(jiàn)相應(yīng)信息。