MySQL存儲引擎是什麼?有什麼用?

存儲引擎字面如何理解?

其實很多名詞,把他們拆開的意思組合起來,就可以大致明白組合成的名詞是什麼意思。就拿存儲引擎來說,存儲在計算機中的意思是將數據保存到某種介質中,並且保證數據的正常訪問。而引擎的是指發動機的核心。

組合起來的意思大致是保存數據的核心技術,也就是說,存儲引擎是服務於存儲服務的,通過存儲引擎將數據保存。就跟計算機如何將數據保存到磁盤中一樣,在數據庫中,存儲引擎的意思就是通過何種引擎將數據存儲在磁盤中。

數據庫存儲引擎

在數據庫中,存儲引擎是數據庫中的底層套件,在創建表中使用,指定通過何種引擎存儲數據,MySQL數據庫默認使用的存儲引擎爲InnoDB。

不同的存儲引擎有不同的存儲機制,並且支持的功能也不相同。對於存儲引擎的選擇,基本上都是根據需求來定的。

以下爲引用,地址:MySQL8.0版本參考手冊

MySQL 8.0支持的存儲引擎

InnoDB:MySQL 8.0中的默認存儲引擎。 InnoDB是用於MySQL的事務安全(兼容ACID)的存儲引擎,具有提交,回滾和崩潰恢復功能以保護用戶數據。 InnoDB行級鎖定(無需升級爲更粗粒度的鎖定)和Oracle風格的一致非鎖定讀取可提高多用戶併發性和性能。InnoDB將用戶數據存儲在聚集索引中,以減少基於主鍵的常見查詢的I / O。爲了保持數據完整性, InnoDB還支持FOREIGN KEY引用完整性約束。

MyISAM:這些表佔用的空間很小。 表級鎖定 限制了讀/寫工作負載中的性能,因此它通常用於Web和數據倉庫配置中的只讀或只讀工作負載中。

Memory:將所有數據存儲在RAM中,以便在需要快速查找非關鍵數據的環境中進行快速訪問。該發動機以前稱爲HEAP發動機。它的用例正在減少;InnoDB藉助其緩衝池內存區域,它提供了一種通用且持久的方式來將大多數或所有數據保留在內存中,並 NDBCLUSTER爲大型分佈式數據集提供了快速的鍵值查找。

CSV:其表實際上是帶有逗號分隔值的文本文件。CSV表允許您以CSV格式導入或轉儲數據,以便與讀取和寫入相同格式的腳本和應用程序交換數據。由於CSV表未建立索引,因此通常InnoDB在正常操作期間將數據保留在表中,並且僅在導入或導出階段使用CSV表。

Archive:這些緊湊的,未索引的表旨在用於存儲和檢索大量很少參考的歷史,歸檔或安全審覈信息。

Blackhole:Blackhole存儲引擎接受但不存儲數據,類似於Unix /dev/null設備。查詢總是返回一個空集。這些表可用於將DML語句發送到從屬服務器的複製配置中,但是主服務器不保留其自己的數據副本。

NDB(也稱爲 NDBCLUSTER):此集羣數據庫引擎特別適合於需要儘可能高的正常運行時間和可用性的應用程序。

Merge:使MySQL DBA或開發人員可以在邏輯上對一系列相同的MyISAM表進行分組並將它們作爲一個對象引用。適用於VLDB環境,例如數據倉庫。

Federated:提供了鏈接單獨的MySQL服務器以從許多物理服務器創建一個邏輯數據庫的能力。非常適合於分佈式或數據集市環境。

Example:此引擎作爲MySQL源代碼中的示例,說明了如何開始編寫新的存儲引擎。它主要是開發人員感興趣的。存儲引擎是什麼都不做的 “ 存根 ”。您可以使用此引擎創建表,但是不能在其中存儲數據或從中檢索數據。

若不對存儲引擎進行限制,那麼在創建表的時候可以指定任意存儲引擎。

存儲引擎功能表

功能 MyISAM Memory InnoDB Archive NDB
B樹索引
備份/時間點恢復
集羣數據庫支持
聚集索引
壓縮數據
資料快取
加密數據
外鍵支持
全文搜索索引
地理空間數據類型支持
地理空間索引支持
哈希索引
索引緩存
鎖定粒度
MVCC
複製支持 限量
儲存限制 256TB 內存 64TB 384EB
T樹索引
交易次數
更新數據字典的統計信息

設置存儲引擎

在創建表時,通過ENGINE在CREATE TABLE語句中添加表時來指定要使用的存儲引擎。

mysql> create table test(id int)engine=myisam;
mysql> show create table test\G
*************************** 1. row ***************************
       Table: test
Create Table: CREATE TABLE `test` (
  `id` int(11) DEFAULT NULL
) ENGINE=MyISAM DEFAULT CHARSET=utf8

若是省略ENGINE選項,將使用默認存儲引擎。

mysql> create table test2(id int);
mysql> show create table test2\G
*************************** 1. row ***************************
       Table: test2
Create Table: CREATE TABLE `test2` (
  `id` int(11) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8

方式1
通過default-storage-engine可以在my.cnf配置文件中指定默認存儲引擎。

例如:將默認存儲引擎設爲myisam

[root@linux ~]# echo "default-storage-engine=myisam" >> /etc/my.cnf

接下來在MySQL中創建表,不指定存儲引擎,默認將是myisam。

mysql> create table test4(id int);
mysql> show create table test4\G
*************************** 1. row ***************************
       Table: test4
Create Table: CREATE TABLE `test4` (
  `id` int(11) DEFAULT NULL
) ENGINE=MyISAM DEFAULT CHARSET=utf8

方式2
在數據庫中,也可使用SET default_storage_engine=存儲引擎將默認存儲引擎更改,但此方式爲臨時更改,重新進入數據庫中需要重新指定默認的存儲引擎。

例如:將默認存儲引擎改爲InnoDB。

在之前修改my.cnf文件中,已經將默認的存儲引擎改爲myisam。

mysql> show create table test6;
mysql> show create table test6\G
*************************** 1. row ***************************
       Table: test6
Create Table: CREATE TABLE `test6` (
  `id` int(11) DEFAULT NULL
) ENGINE=MyISAM DEFAULT CHARSET=utf8

接下來在數據庫中修改默認存儲引擎。

mysql> set default_storage_engine=innodb;
mysql> create table test7(id int);
mysql> show create table test7\G
*************************** 1. row ***************************
       Table: test7
Create Table: CREATE TABLE `test7` (
  `id` int(11) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章