MySQL數據庫引擎MyISAM和InnoDB區別

MyISAMInnoDB的主要的不同點在於性能和事務控制上。

MyISAM

①   不支持事務(事務是指邏輯上的一組操作,組成這組操作的各個單元,要麼全部成功要麼全部失敗)。
②   表級鎖定(更新時鎖整個表)
③   讀寫互相阻塞:不僅會在寫入的時候阻塞讀取,MyISAM還會在讀取的時候阻塞寫入,但讀本身不會阻塞另外的讀。
④   只會緩存索引:MyISAM可以通過key_buffer_size緩存索引,以大大提高訪問性能,減少磁盤I/O,但這個緩存區只會緩存索引,而不會緩存數據。
⑤   讀取速度較快,佔用資源相對少。
⑥   不支持外鍵約束,但支持全文索引。
⑦   5.5.5前爲默認存儲引擎。

適合的業務場景:
1.  不需要事務支持的業務
2.  讀數據比較多的應用
3.  數據庫修改較少的業務
4.  對數據一致性要求不是非常高的業務
5.  硬件資源比較差的機器可以用MyISAM

InnoDB

①   支持事務:支持4個事務隔離級別,支持多版本讀。
②   行級鎖定(更新時一般是鎖定當前行):通過索引實現,全表掃描仍然會是表鎖。
③   讀寫阻塞與事務隔離級別相關。
④   具有非常高效的緩存特性:能緩存索引,也能緩存數據。
⑤   整個表和主鍵以Cluster方式存儲,組成一顆平衡樹。
⑥   所有Secondary Index都會保存主鍵信息。
⑦   支持分區,表空間,類似Oracle數據庫。
⑧   支持外鍵約束,5.5以前不支持全文索引,之後版本支持了。
⑨   和MyISAM相比對硬件資源要求比較高。

適合的業務場景:
1.  需要事務支持的業務
2.  行級鎖定對高併發有很好的適應能力,但需要確保查詢時通過索引完成。
3.  讀寫及更新都很頻繁的場景
4.  數據一致性要求較高的業務
5.  硬件設備內存較大,可以利用InnoDB較好的緩存能力來提高內存利用率,儘可用減少磁盤I/O。

事務隔離級別:
四種隔離級別說明

隔離級別 髒讀 不可重複讀 幻讀
未提交讀 可能 可能 可能
已提交讀 不可能 可能 可能
可重複讀 不可能 不可能 可能
可串行化 不可能 不可能 不可能
髒讀 :一個事務讀取到另一事務未提交的更新數據。

不可重複讀 : 在同一事務中,多次讀取同一數據返回的結果有所不同, 換句話說, 後續讀取可以讀到另一事務已提交的更新數據。
相反, “可重複讀”在同一事務中多次讀取數據時, 能夠保證所讀數據一樣, 也就是後續讀取不能讀到另一事務已提交的更新數據。

幻讀 :一個事務讀到另一個事務已提交的insert數據。

MyISAM與InnoDB對比表

MySQL數據庫MyISAM和InnoDB存儲引擎的對比

MyISAM 不支持事務、也不支持外鍵,其優勢是訪問的速度快,對事務完整性沒有要求或者以 SELECT、INSERT 爲主的應用基本上都可以使用這個引擎來創建表。

InnoDB 存儲引擎提供了具有提交、回滾和崩潰恢復能力的事務安全。但是對比 MyISAM的存儲引擎,InnoDB 寫的處理效率差一些並且會佔用更多的磁盤空間以保留數據和索引。

MyISAM 對事務一致性要求不高,主要用來執行查詢操作,比如日誌類的。比如說一個主從庫,主庫的表可以用innodb爲了效率和數據安全,從庫一部分表可以用MyISAM 專門用來做報表查詢。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章