如何選擇MySQL的存儲引擎?
【01】存儲引擎簡介
存儲引擎是負責數據的存儲和提取的。MySQL支持多種存儲引擎,存儲引擎之間是可以替換的,所以叫插件式的存儲引擎。每個存儲引擎都有各自的特點和應用場景。需要特別注意的是,存儲引擎是基于表的,而不是數據庫。
【02】存儲引擎分類
首先,數據庫支持哪些存儲引擎,可以通過如下命令查看:
- show engines;
如何查看已經存在的表使用的是哪種存儲引擎?可以使用DDL建表語句,命令如下:
- show create table table_name;-- 例:ENGINE=InnoDB
在MySQL服務器,表具體是怎么樣存儲的呢?數據文件的存儲路徑可以通過以下命令查看:
- show variables like 'datadir';-- /var/lib/mysql/
默認情況下,每個庫對應一個文件夾,而且不管表用的是哪種類型的存儲引擎,都會有一個擴展名是frm的表結構定義文件,不同類型的存儲引擎存儲數據的文件格式不同,具體如下。
下面介紹下幾種常見存儲引擎:
一、InnoDB
MySQL5.7默認的存儲引擎,數據存儲在ibd文件中,該文件還會存放相關的索引數據。特點:
- 支持事務,支持外鍵,因此數據的完整性、一致性更高。
- 支持行級別的鎖和表級別的鎖。
- 支持讀寫并發,寫不阻塞讀(MVCC)。
- 特殊的索引存放方式,可以減少 IO,提升查詢效率。
適合經常更新的表或者存在并發讀寫或者有事務處理的業務系統。
二、MyISAM
MySQL5.5之前默認的存儲引擎,數據存儲在MYD文件中,相關索引數據存儲在MYI文件中。表級鎖定限制了讀/寫的性能,因此在 Web 和數據倉庫配置中,它通常用于只讀或以讀為主的工作。特點:
支持表級別的鎖。
不支持事務。
存儲了表的行數(count 速度更快)。
適合只讀或以讀為主的數據分析項目。
三、Memory
特點:
- 數據存儲在內存里面,所以讀寫的速度很快,但是數據庫重啟或者崩潰,數據會全部消失。
適合做臨時表。
四、CSV
數據以CSV文件存儲。特點:
- 不支持索引。
- 不允許空行。
- 可以直接編輯。
適合在不同數據庫之間導入導出。
五、Archive
采用壓縮協議進行數據存儲,數據存儲為ARZ文件格式。
特點:不支持索引,不支持 update delete。
適合做數據的備份。
以上是 MySQL 里面常見的一些存儲引擎。
【03】如何選擇存儲引擎
如果對數據一致性要求比較高,需要事務支持,可以使用InnoDB。如果是只讀或者大部分只讀的表,可以使用MyISAM。



















