MySQL引擎:MyIsam和Innodb的区别
InnoDB:
定義:
InnoDB是一個事務型的存儲引擎,有行級鎖定和外鍵約束。Innodb引擎提供了對數據庫
ACID事務的支持,并且實現了SQL標準的四種隔離級別,該引擎還提供了行級鎖和外鍵約束,
它的設計目標是處理大容量數據庫系統,它本身其實就是基于MySQL后臺的完整數據庫系統,
MySQL運行時Innodb會在內存中建立緩沖池,用于緩沖數據和索引。但是該引擎不支持FULLTEXT
類型的索引,而且它沒有保存表的行數,當SELECT COUNT(*) FROM TABLE時需要掃描全表。
當需要使用數據庫事務時,該引擎當然是首選。由于鎖的粒度更小,寫操作不會鎖定全表,所以在
并發較高時,使用Innodb引擎會提升效率。但是使用行級鎖也不是絕對的,如果在執行一個SQL
語句時MySQL不能確定要掃描的范圍,InnoDB表同樣會鎖全表。
優點:
1、支持事務處理、ACID事務特性;
2、實現了SQL標準的四種隔離級別;
3、支持行級鎖和外鍵約束;
4、可以利用事務日志進行數據恢復。
5、鎖級別為行鎖,行鎖優點是適用于高并發的頻繁表修改,高并發是性能優于 MyISAM。缺點是系統消耗較大。
6、索引不僅緩存自身,也緩存數據,相比 MyISAM 需要更大的內存。
缺點:
因為它沒有保存表的行數,當使用COUNT統計時會掃描全表。
?
適用場景:
1)經常更新的表,適合處理多重并發的更新請求。
2)支持事務。
3)可以從災難中恢復(通過bin-log日志等)。
4)外鍵約束。只有他支持外鍵。
5)支持自動增加列屬性auto_increment。
?
MyIsam:
定義:
MyISAM 是 MySQL 5.5.5 之前的默認引擎,它的設計目標是快速讀取。但是它沒有提供對數據庫事務的支持,也不支持行級鎖和外鍵,因此當INSERT(插入)或UPDATE(更新)數據時即寫操作需要鎖定整個表,效率便會低一些。
?
優點:
1.高性能讀取;
2.因為它保存了表的行數,當使用COUNT統計時不會掃描全表;
缺點:
1、鎖級別為表鎖,表鎖優點是開銷小,加鎖快;缺點是鎖粒度大,發生鎖沖動概率較高,容納并發能力低,這個引擎適合查詢為主的業務。
2、此引擎不支持事務,也不支持外鍵。
3、INSERT和UPDATE操作需要鎖定整個表;
4、不能在表損壞后恢復數據。(是不能主動恢復)
?
以下兩點必須使用 InnoDB:
(1)可靠性要求比較高,或者要求事務;
(2)表更新和查詢都相當的頻繁,并且表鎖定的機會比較大的情況。
?
對比之下,MyISAM的使用場景:
1)做很多count的計算的。如一些日志,調查的業務表。
2)插入修改不頻繁,查詢非常頻繁的。
3)沒有事務。
《新程序員》:云原生和全面數字化實踐50位技術專家共同創作,文字、視頻、音頻交互閱讀總結
以上是生活随笔為你收集整理的MySQL引擎:MyIsam和Innodb的区别的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 10本计算机视觉必读经典图书,入门篇 +
- 下一篇: Linux下gcov和lcov代码覆盖率