MySQL有哪些存儲引擎,各自的優缺點,應用場景



常常面試都會問到MYSQL有哪些存儲引擎,以及各自的優缺點。今天主要分享常見的存儲引擎:MyISAM、InnoDB、MERGE、MEMORY(HEAP)、BDB(BerkeleyDB)等,以及最經常使用的MyISAM與InnoDB兩個引擎 ,文章尾部有二者的詳細比較。面試

MySQL經常使用存儲引擎介紹數據庫

1.InnoDB 引擎(MySQL5.5之後默認使用)緩存

MySQL 5.5 及之後版本中的默認存儲引擎,他的優勢以下:安全

災難恢復性好服務器

支持事務架構

使用行級鎖併發

支持外鍵關聯性能

支持熱備份學習

對於InnoDB引擎中的表,其數據的物理組織形式是簇表(Cluster Table),主鍵索引和數據是在一塊兒的,數據按主鍵的順序物理分佈操作系統

實現了緩衝管理,不只能緩衝索引也能緩衝數據,而且會自動建立散列索引以加快數據的獲取

支持熱備份

2.MyISAM引擎

特性以下:

不支持事務

使用表級鎖,併發性差

主機宕機後,MyISAM表易損壞,災難恢復性不佳

能夠配合鎖,實現操做系統下的複製備份、遷移

只緩存索引,數據的緩存是利用操做系統緩衝區來實現的。可能引起過多的系統調用且效率不佳

數據緊湊存儲,所以可得到更小的索引和更快的全表掃描性能

3.MEMORY 存儲引擎

提供內存表,也不支持事務和外鍵。顯著提升訪問數據的速度,可用於緩存會頻繁訪問的、能夠重構的數據、計算結果、統計值、中間結果。

缺點以下:

使用表級鎖,雖然內存訪問快,但若是頻繁的讀寫,表級鎖會成爲瓶頸

只支持固定大小的行。Varchar類型的字段會存儲爲固定長度的Char類型,浪費空間

不支持TEXT、BLOB字段。當有些查詢須要使用到臨時表(使用的也是MEMORY存儲引擎)時,若是表中有TEXT、BLOB字段,那麼會轉換爲基於磁盤的MyISAM表,嚴重下降性能

因爲內存資源成本昂貴,通常不建議設置過大的內存表,若是內存表滿了,可經過清除數據或調整內存表參數來避免報錯

服務器重啓後數據會丟失,複製維護時須要當心

MySQL存儲引擎MyISAM與InnoDB如何選擇

1.兩種存儲引擎的大體區別表如今:

1)InnoDB支持事務,MyISAM不支持,這一點是很是之重要。事務是一種高級的處理方式,如在一些列增刪改中只要哪一個出錯還能夠回滾還原,而MyISAM就不能夠了。

2)MyISAM適合查詢以及插入爲主的應用,InnoDB適合頻繁修改以及涉及到安全性較高的應用

3)InnoDB支持外鍵,MyISAM不支持

4)從MySQL5.5.5之後,InnoDB是默認引擎

5)InnoDB不支持FULLTEXT類型的索引

6)InnoDB中不保存表的行數,如select count(*) from table時,InnoDB須要掃描一遍整個表來計算有多少行,可是MyISAM只要簡單的讀出保存好的行數便可。注意的是,當count(*)語句包含where條件時MyISAM也須要掃描整個表。

7)對於自增加的字段,InnoDB中必須包含只有該字段的索引,可是在MyISAM表中能夠和其餘字段一塊兒創建聯合索引。

8)清空整個表時,InnoDB是一行一行的刪除,效率很是慢。MyISAM則會重建表。

9)InnoDB支持行鎖(某些狀況下仍是鎖整表,如 update table set a=1 where user like '%lee%'

有人說MYISAM只能用於小型應用,其實這只是一種偏見。

若是數據量比較大,這是須要經過升級架構來解決,好比分表分庫,讀寫分離,而不是單純地依賴存儲引擎。

如今通常都是選用InnoDB了,主要是MyISAM的全表鎖,讀寫串行問題,併發效率鎖表,效率低,MyISAM對於讀寫密集型應用通常是不會去選用的。

總之:

1.MyISAM類型不支持事務處理等高級處理,而InnoDB類型支持。

2.MyISAM類型的表強調的是性能,其執行速度比InnoDB類型更快,可是不提供事務支持,而InnoDB提供事務支持已經外部鍵等高級數據庫功能。

如下是架構進階資料,須要學習免費課程的狂戳

相關文章
相關標籤/搜索