Mysql的引擎機制有兩種,分別是MyISAM
和InnoDB
,mysql5.5版本之后默認的引擎已經(jīng)是InnoDB
了。本文簡單講解一下這2中引擎機制的區(qū)別
鎖機制
MyISAM:只支持表級鎖颊郎,用戶在操作myisam表時,select,update,delete膜楷,insert語句都會給表自動加鎖,這種處理方式一方面加鎖的開銷比較小贞奋,且不會出現(xiàn)死鎖赌厅,但另一方面并發(fā)性能較差
InnoDB:支持行鎖。每次操作鎖住一行數(shù)據(jù)轿塔,一方面行級鎖在每次獲取鎖和釋放鎖的操作需要消耗比表鎖更多的資源特愿,速度較慢仲墨,且可能發(fā)生死鎖,但是另一方面由于鎖的粒度較小洽议,發(fā)生鎖沖突的概率也比較低宗收,并發(fā)性較好。此外亚兄,即使是使用了InnoDB存儲引擎,但如果MySQL執(zhí)行一條sql語句時不能確定要掃描的范圍采驻,也會鎖住整張表审胚。
事務機制
MyISAM:不支持事務
InnoDB:支持事務。由于MyISAM在很長一段時間內是MySQL的默認存儲引擎礼旅,所以在很多人的印象中MySQL是不支持事務的數(shù)據(jù)庫膳叨。實際上,InnoDB是一個性能良好的事務性引擎痘系。它實現(xiàn)了四個標準的隔離級別菲嘴,默認的隔離級別為可重復讀(REPEATABLE READ),并通過間隙鎖策略來防止幻讀的出現(xiàn)汰翠。此外它還通過多版本并發(fā)控制(MVCC)來支持高并發(fā)龄坪。
記錄數(shù)查詢
MyISAM:直接記錄了表的行數(shù),使用select count(*)
時直接給出結果
InnnoDB:需要全表掃描來統(tǒng)計行數(shù)复唤,當數(shù)據(jù)量很大時比較耗時健田,但是當使用where
來指定范圍時,兩者的耗時是一樣的
外鍵機制
MyISAM:不支持外鍵
InnoDb:支持外鍵
修復機制
MyISAM:崩潰后無法安全恢復
InnoDB:支持崩潰后的安全恢復佛纫。InnoDB實現(xiàn)了一套完善的崩潰恢復機制妓局,保證在任何狀態(tài)下(包括在崩潰恢復狀態(tài)下)數(shù)據(jù)庫掛了,都能正吵视睿恢復
如果你問我那我怎么選擇引擎呢好爬,直接InnoDB
,官方把默認引擎從MyISAM
改成InnoDB
不是沒有原因的,而且使用MyISAM
引擎甥啄,數(shù)據(jù)一旦崩潰直接哭吧