有趣的 Mysql 儲存引擎

2021-09-19 06:35:51 字數 3745 閱讀 3289

mysql 提供了一套統一的應用開發模型和核心 api,因此,儘管不同的儲存引擎擁有不同的特性,不過對於開發人員,應用操作都是完全透明的。應用層的連線並不直接訪問儲存引擎層,而是訪問 mysql 提供的 api,也就是說不管所操作的表物件使用什麼儲存引擎,讀寫資料時執行的 ddl/dml 語句並沒有不同

下面介紹使用最廣泛的儲存引擎

記憶體儲存引擎,直接把錶儲存到記憶體中,在磁碟中只擁有乙個 .frm 檔案,用來儲存表結構的定義

通過指定 engine=memory 設定

當 mysql 服務關閉時,所有 memory 引擎表中的資料全部會丟失

分配給 memory 引擎表的記憶體,正常情況不會釋放,而是有該錶一直持有,即使刪除資料,也不會被收回,只有當整個表被刪除或者重建時才會**相關記憶體

memory 引擎表占用多少記憶體空間?由兩個因素決定

首先 memory 引擎錶能使用的最大記憶體不能超過 max_heap_table_size 系統設定的值,該值預設情況下是 16mb (還可以在會話時,臨時設定 max_heap_table_size 變數的值)

在建立時通過 create table 語句的 max_rows 選項,指定表中最大的記錄數的方式來限制表能夠使用的記憶體空間

csv 儲存引擎是基於 csv 格式檔案儲存資料

通過指定 engine=csv 設定

csv 儲存引擎因為自身檔案格式的原因,所有列必須強制指定 not null ,另外 csv 引擎也不支援索引,不支援分割槽

csv 儲存引擎也會包含乙個儲存表結構的 .frm 檔案,還會建立乙個 .csv 儲存資料的檔案,還會建立乙個同名的元資訊檔案,該檔案的擴充套件名為 .csm ,用來儲存表的狀態及表中儲存的資料量

因為 csv 檔案本身就可以直接被編輯,保不齊就有不按規則出牌的情況,如果出現csv 檔案中的內容損壞了的情況,也可以使用 check table 或者 repair table 命令檢查和修復

archive 儲存引擎適用場景恰如其名---歸檔,基於這個儲存引擎,能夠將大量資料壓縮儲存,插入的列會被壓縮

使用了 zlib 無損資料壓縮演算法,並且還可以使用 optimize table 分析表並使其打包成更小的格式

相同的資料量,archive 儲存引擎 比 myisam 引擎小了近 8 倍

不足點:

目前 archive 引擎僅能夠支援 insert 和 select 語句,而不能支援 delete、replace、update 語句

不支援索引

archive 引擎除了擁有 .frm 結構檔案外,還有乙個擴充套件名為 .arz 的資料檔案

黑洞儲存引擎,所有插入的資料並不會儲存,blackhole 引擎表永遠保持為空

:) 我這裡沒想到什麼適用場景,故不做太多介紹

merge 儲存引擎,也被稱為 mgr_myisam 儲存引擎,它實際上是將一組 myisam 表聚合在一起,使用時就和一張表一樣

merge 儲存引擎,要求聚合的表結構、索引要完全一致

使用 engine=merge union=(表名,表名) 建立

除了儲存表結構定義的 .frm 檔案外,還有乙個擴充套件名為 .mgr 的檔案,這個檔案不儲存資料,而是儲存的資料**地

merge 儲存引擎出了支援 select 之外,還支援 update、delete 語句

需要支援 insert 語句的話,需要配置 insert_method 指定插入的記錄儲存到哪個表中

insert_method 選項有三個值

no: 不允許插入,這也是預設值

first 插入到第乙個表

last 插入到最後乙個表

如果沒有指定表使用的儲存引擎,那麼建立表的預設儲存引擎就是 myisan (5.5 以前)

使用 engine=myisam; 設定

缺省會建立三個檔案

frm 檔案,用來儲存表的物件結構

.myd 檔案,用來儲存資料

.myi 檔案,用來儲存索引

myiasm 特性

最大儲存能力為 256tb

支援 b-tree 索引

支援全文索引

支援索引快取

支援資料壓縮

支援複製

支援查詢快取

地理(三維)資料型別支援

地理資料索引支援

支援資料加密

支援統計資訊

鎖粒度到 table

支援備份/時間點恢復

myisan 不支援的

mvcc 不支援

clustered 索引不支援

hash 索引不支援

不支援事物

不支援資料快取

不支援外健約束

不支援行級鎖

myisam 主要優點是:查詢快,寫入快

myisam 支援三種儲存格式:靜態(fixed)、動態(dynamic)、壓縮(compressed)

靜態:

靜態指的是,表不包含(varchar/varbinary/blob/text)

靜態表會把以上字段型別會自動填充到達列的長度

較快,易於快取

易於崩潰後重建

比動態表占用更多的磁碟空間

靜態表,很容易可以到磁碟中的資料檔案定位和查詢記錄,因為每一行記錄都是固定的

動態:

包含(varchar/varbinary/blob/text)

除了字串長度小於4的列外,其他字串的長度都是動態的

比靜態的更節約空間

壓縮:

壓縮表是只允許已讀的,優點在於更節省空間,更快
mysql 5.5 之後。innodb 被認定為預設的儲存引擎

innodb 有下列關鍵特性

設計遵循 acid 模型,支援事物,擁有從服務崩潰中恢復的能力,能過最大限度的保護使用者的資料

支援行級鎖,並且引入了型別 oracle 資料庫中的一致性讀特性,以提公升多使用者併發時的讀寫效能

innodb 引擎表組織資料時按照主鍵聚族,通過主鍵查詢資料時效能極為優異

在維護資料完整性方面,innodb 支援外建約束

在伺服器發生故障的情況下,mysql 服務在啟動時,會自動進行故障恢復

innodb 擁有自己的快取池,常用的資料和索引都在快取中

對於 insert,update,delete 操作,會被一種稱為 change buffering 的機制自動優化

什麼是 acid ?

即事物的四個特性:原子性、一致性、隔離性、永續性
innodb 儲存引擎的特點

儲存能力 64tb

支援 mvcc

支援 b-tree 索引

支援 clustered 索引

外建約束

查詢快取

索引快取

資料快取

事物地理(三維)資料型別支援

資料加密

資料壓縮

統計資訊

支援行級鎖

備份/時間點恢復

複製支援

不支援的功能

不支援 hash 索引

不支援全文索引

地理資料索引支援

mysql的儲存引擎有 mysql儲存引擎有哪些?

儲存引擎是資料庫管理系統用來從資料庫建立 讀取和更新資料的軟體模組。mysql中有兩種型別的儲存引擎 事務型和非事務型。對於mysql 5.5及更高版本,預設的儲存引擎是innodb。在5.5版本之前,mysql的預設儲存引擎是myisam。那麼mysql儲存引擎有哪些?一 innodb 這是mys...

mysql儲存引擎 mysql儲存引擎簡介

精品推薦 什麼是儲存引擎 mysql儲存引擎是資料庫如何儲存資料 怎樣建立索引以及如何查詢更新資料等技術的實現方法,資料通過使用不同的技術儲存在檔案中,使用不同的儲存機制 索引方式來提供不同的功能。在mysql這種關係型資料中心來說,資料是以表的方式來儲存的,因此,簡單點來說,儲存引擎就是儲存和操作...

mysql個儲存引擎 MySQL儲存引擎

mysql資料庫的體系架構如下圖所示 從上圖中可以看出,mysql主要分為以下幾個元件 連線池元件 管理服務和工具元件 sql介面元件 分析器元件 優化器元件 緩衝元件 外掛程式式儲存引擎 物理檔案 儲存引擎 其實就是指定表如何儲存資料,如何為儲存的資料建立索引以及如何更新 查詢資料等技術實現的方法...