MySQL存储引擎精讲(附带各种存储引擎的对比)
接下來介紹一下存儲引擎的基本概念、MySQL 支持的存儲引擎、存儲引擎的選擇以及操作默認(rèn)存儲引擎。
?
什么是存儲引擎
數(shù)據(jù)庫存儲引擎是數(shù)據(jù)庫底層軟件組件,數(shù)據(jù)庫管理系統(tǒng)使用數(shù)據(jù)引擎進(jìn)行創(chuàng)建、查詢、更新和刪除數(shù)據(jù)操作。不同的存儲引擎提供不同的存儲機(jī)制、索引技巧、鎖定水平等功能,使用不同的存儲引擎還可以獲得特定的功能。
現(xiàn)在許多數(shù)據(jù)庫管理系統(tǒng)都支持多種不同的存儲引擎。MySQL 的核心就是存儲引擎。
提示:InnoDB 事務(wù)型數(shù)據(jù)庫的首選引擎,支持事務(wù)安全表(ACID),支持行鎖定和外鍵。MySQL 5.5.5 之后,InnoDB 作為默認(rèn)存儲引擎。
MyISAM 是基于 ISAM 的存儲引擎,并對其進(jìn)行擴(kuò)展,是在 Web、數(shù)據(jù)倉儲和其他應(yīng)用環(huán)境下最常使用的存儲引擎之一。MyISAM 擁有較高的插入、查詢速度,但不支持事務(wù)。
MEMORY 存儲引擎將表中的數(shù)據(jù)存儲到內(nèi)存中,為查詢和引用其他數(shù)據(jù)提供快速訪問。
MySQL 5.7 支持的存儲引擎
MySQL 支持多種類型的數(shù)據(jù)庫引擎,可分別根據(jù)各個引擎的功能和特性為不同的數(shù)據(jù)庫處理任務(wù)提供各自不同的適應(yīng)性和靈活性。在 MySQL 中,可以利用 SHOW ENGINES 語句來顯示可用的數(shù)據(jù)庫引擎和默認(rèn)引擎。
MySQL 提供了多個不同的存儲引擎,包括處理事務(wù)安全表的引擎和處理非事務(wù)安全表的引擎。在 MySQL 中,不需要在整個服務(wù)器中使用同一種存儲引擎,針對具體的要求,可以對每一個表使用不同的存儲引擎。
MySQL 5.7 支持的存儲引擎有 InnoDB、MyISAM、Memory、Merge、Archive、Federated、CSV、BLACKHOLE 等。可以使用SHOW ENGINES語句查看系統(tǒng)所支持的引擎類型,結(jié)果如圖所示。
Support 列的值表示某種引擎是否能使用,YES表示可以使用,NO表示不能使用,DEFAULT表示該引擎為當(dāng)前默認(rèn)的存儲引擎。
如何選擇 MySQL 存儲引擎
不同的存儲引擎都有各自的特點(diǎn),以適應(yīng)不同的需求,如表所示。為了做出選擇,首先要考慮每一個存儲引擎提供了哪些不同的功能。
| 存儲限制 | 256TB | RAM | 64TB | None |
| 支持事務(wù) | No | No | Yes | No |
| 支持全文索引 | Yes | No | No | No |
| 支持樹索引 | Yes | Yes | Yes | No |
| 支持哈希索引 | No | Yes | No | No |
| 支持?jǐn)?shù)據(jù)緩存 | No | N/A | Yes | No |
| 支持外鍵 | No | No | Yes | No |
可以根據(jù)以下的原則來選擇 MySQL 存儲引擎:
- 如果要提供提交、回滾和恢復(fù)的事務(wù)安全(ACID 兼容)能力,并要求實現(xiàn)并發(fā)控制,InnoDB 是一個很好的選擇。
- 如果數(shù)據(jù)表主要用來插入和查詢記錄,則 MyISAM 引擎提供較高的處理效率。
- 如果只是臨時存放數(shù)據(jù),已經(jīng)為大家精心準(zhǔn)備了大數(shù)據(jù)的系統(tǒng)學(xué)習(xí)資料,從Linux-Hadoop-spark-......,需要的小伙伴可以點(diǎn)擊數(shù)據(jù)量不大,并且不需要較高的數(shù)據(jù)安全性,可以選擇將數(shù)據(jù)保存在內(nèi)存的 MEMORY 引擎中,MySQL 中使用該引擎作為臨時表,存放查詢的中間結(jié)果。
- 如果只有 INSERT 和 SELECT 操作,可以選擇Archive 引擎,Archive 存儲引擎支持高并發(fā)的插入操作,但是本身并不是事務(wù)安全的。Archive 存儲引擎非常適合存儲歸檔數(shù)據(jù),如記錄日志信息可以使用 Archive 引擎。
提示:使用哪一種引擎要根據(jù)需要靈活選擇,一個數(shù)據(jù)庫中多個表可以使用不同的引擎以滿足各種性能和實際需求。使用合適的存儲引擎將會提高整個數(shù)據(jù)庫的性能。
MySQL 默認(rèn)存儲引擎
InnoDB 是系統(tǒng)的默認(rèn)引擎,支持可靠的事務(wù)處理。
使用下面的語句可以修改數(shù)據(jù)庫臨時的默認(rèn)存儲引擎
SET default_storage_engine=< 存儲引擎名 >
例如,將 MySQL 數(shù)據(jù)庫的臨時默認(rèn)存儲引擎修改為 MyISAM,輸入的 SQL 語句和運(yùn)行結(jié)果如圖所示。
此時,可以發(fā)現(xiàn) MySQL 的默認(rèn)存儲引擎已經(jīng)變成了 MyISAM。但是當(dāng)再次重啟客戶端時,默認(rèn)存儲引擎仍然是 InnoDB。
總結(jié)
以上是生活随笔為你收集整理的MySQL存储引擎精讲(附带各种存储引擎的对比)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: MySQL选择数据库(MySQL USE
- 下一篇: MySQL数据类型简介