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

2021-08-28 12:07:58 字數 2264 閱讀 9432

經常面試都會問到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提供事務支援已經外部鍵等高階資料庫功能。

以下是架構高階資料,需要學習免費課程的狂戳

mysql有哪些儲存引擎 摘抄

mysql的預設儲存引擎是innodb,是唯一乙個支援事務和支援外來鍵的儲存引擎 mysql的主要儲存引擎有 innodb,myisam,merge,memory myisam儲存引擎 不支援事務 也不支援外來鍵,優勢是訪問速度快,對事務完整性沒有 要求或者以select,insert為主的應用基本...

mysql的儲存引擎有 mysql儲存引擎有哪些?

儲存引擎是資料庫管理系統用來從資料庫建立 讀取和更新資料的軟體模組。mysql中有兩種型別的儲存引擎 事務型和非事務型。對於mysql 5.5及更高版本,預設的儲存引擎是innodb。在5.5版本之前,mysql的預設儲存引擎是myisam。那麼mysql儲存引擎有哪些?一 innodb 這是mys...

mysql資料庫有哪些儲存引擎

myisam innodb memory merge archive myisam無法處理事務。適用場景 選擇密集型的表 myisam在篩選大量資料時非常迅速 插入密集型的表 myisam的併發插入特性允許同時選擇和插入資料。應用 管理郵件或web伺服器日誌資訊。innodb 適用場景 更新密集的表...