MySQL 常用引擎總結分享

前言:

MySQL 有很多存儲引擎(也叫數據引擎),所謂的存儲引擎是指用於存儲、處理和保護數據的核心服務。也就是存儲引擎是數據庫的底層軟件組織。在 MySQL 中可以使用“show engines”來查詢數據庫的所有存儲引擎,

如下圖所示: 

 在上述列表中,我們最常用的存儲引擎有以下 3 種:

  • InnoDB
  • MyISAM
  • MEMORY

下面我們分別來看看具體分析。

1.InnoDB

InnoDB 是 MySQL 5.1 之後默認的存儲引擎,它支持事務、支持外鍵、支持崩潰修復和自增列。如果對業務的完整性要求較高,比如張三給李四轉賬,需要減張三的錢,同時給李四加錢,這時候隻能全部執行成功或全部執行失敗,此時可以通過 InnoDB 來控制事務的提交和回滾,從而保證業務的完整性。

1.1 優缺點分析

InnoDB 的優勢是支持事務、支持外鍵、支持崩潰修復和自增列;它的缺點是讀寫效率較差、占用的數據空間較大。

2.MyISAM

MyISAM 是 MySQL 5.1 之前默認的數據庫引擎,讀取效率較高,占用數據空間較少,但不支持事務、不支持行級鎖、不支持外鍵等特性。因為不支持行級鎖,因此在添加和修改操作時,會執行鎖表操作,所以它的寫入效率較低。

2.1 優缺點分析

MyISAM 引擎保存瞭單獨的索引文件 .myi,且它的索引是直接定位到 OFFSET 的,而 InnoDB 沒有單獨的物理索引存儲文件,且 InnoDB 索引尋址是先定位到塊數據,再定位到行數據,所以 MyISAM 的查詢效率是比 InnoDB 的查詢效率要高。但它不支持事務、不支持外鍵,所以它的適用場景是讀多寫少,且對完整性要求不高的業務場景。

3.MEMORY

內存型數據庫引擎,所有的數據都存儲在內存中,因此它的讀寫效率很高,但 MySQL 服務重啟之後數據會丟失。它同樣不支持事務、不支持外鍵。MEMORY 支持 Hash 索引或 B 樹索引,其中 Hash 索引是基於 key 查詢的,因此查詢效率特別高,但如果是基於范圍查詢的效率就比較低瞭。而前面兩種存儲引擎是基於 B+ 樹的數據結構實現瞭。

3.1 優缺點分析

MEMORY 讀寫性能很高,但 MySQL 服務重啟之後數據會丟失,它不支持事務和外鍵。適用場景是讀寫效率要求高,但對數據丟失不敏感的業務場景。

4.查看和設置存儲引擎

4.1 查看存儲引擎

存儲引擎的設置粒度是表級別的,也就是每張表可以設置不同的存儲引擎,我們可以使用以下命令來查詢某張表的存儲引擎:

show create table t;

如下圖所示: 

4.2 設置存儲引擎

在創建一張表的時候設置存儲引擎: 

 修改一張已經存在表的存儲引擎: 

總結

MySQL 中最常見的存儲引擎有:InnoDB、MyISAM 和 MEMORY,其中 InnoDB 是 MySQL 5.1 之後默認的存儲引擎,它支持事務、支持外鍵、支持崩潰修復和自增列,它的特點是穩定(能保證業務的完整性),但數據的讀寫效率一般;而 MyISAM 的查詢效率較高,但不支持事務和外鍵;MEMORY 的讀寫效率最高,但因為數據都保存在內存中的,所以 MySQL 服務重啟之後數據就會丟失,因此它隻適用於數據丟失不敏感的業務場景。

到此這篇關於MySQL 常用引擎總結分享的文章就介紹到這瞭,更多相關MySQL 引擎內容請搜索WalkonNet以前的文章或繼續瀏覽下面的相關文章希望大傢以後多多支持WalkonNet!

推薦閱讀: