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