前言
?Hello!這里是歐_aita的博客。
?今日語錄:不要在乎別人怎么看你,因為他們根本就沒有時間,他們只關心他們自己。
?個人主頁:歐_aita
ψ(._. )>?個人專欄:
數據結構與算法
MySQL數據庫
存儲引擎
- 前言
- MySQL體系結構📕
- 存儲引擎簡介📕
- 在創建表時,指定存儲引擎
- 查看當前數據庫支持的存儲引擎
- 存儲引擎特點📕
- InnoDB
- 邏輯存儲結構
- MyISAM
- Memory
- 區別
- 存儲引擎選擇📕
MySQL體系結構📕
- 連接層 (連接池)最上層是一些客戶端和鏈接服務,主要完成類似于連接處理、授權認證、及相關的安全方案。服務器也會為安全接入的每個客戶驗證它所具有的操作權限。
- 服務層 (SQL接口 解析器 查詢優化器 緩存)第二層架構主要完成大多數的核心服務功能,如SQL接口,并完成存儲的查詢,SQL的分析與優化,部分內置函數的執行。所有跨存儲引擎的功能也在這一層實現,如 過程、函數等。
- 引擎層 (可插拔存儲引擎)存儲引擎真正的負責了MySQL中數據的存儲和提取,服務器通過API和存儲引擎進行通信。不同的存儲引擎具有不同的功能,這樣我們可以根據自己的需要,來選取合適的存儲引擎。
- 存儲層 (磁盤)主要是將數據存儲在文件系統之上,并完成與存儲引擎的交互。
存儲引擎簡介📕
存儲引擎就是存儲數據、建立索引、更新/查詢數據等技術的實現技術的實現方式。存儲引擎是基于表的,而不是基于庫的,所以存儲引擎也可被稱為表類型。
在創建表時,指定存儲引擎
在5.5版本之后,默認的存儲引擎時InnoDB
CREATE TABLE 表名(字段1 字段1類型 [COMMENT 字段1注釋],......字段n 字段n類型 [COMMENT 字段n注釋]
)ENGINE = INNODB [COMMENT 表注釋];
查看當前數據庫支持的存儲引擎
SHOW ENGINES;
存儲引擎特點📕
InnoDB
- 介紹
InnoDB是一種兼顧高可靠性和高性能的通用存儲引擎,在MySQL 5.5之后,InnoDB是默認的MySQL存儲引擎。
- 特點
DML操作遵循ACID模型,支持事務;
行級鎖,提高并發訪問性能;
支持外鍵FOREIGN KEY約束,保證數據的完整性和正確性;
- 文件
xxx.ibd:xxx代表的是表名,InnoDB引擎的每張表都會對應這樣一個表空間文件,存儲該表的表結構(frm、sdi)、數據和索引。
參數:innoDB_file_per_table
可以看到表空間文件都是以idb為后綴(前提是創建表的時候默認使用InnoDB存儲引擎)
在命令行中可以看到idb文件中的內容。
邏輯存儲結構
每個區的空間是固定的(1M),每一頁的空間也是固定的(16K),所以每個區可存儲的頁個數也是固定的(64)。
MyISAM
- 介紹
MyISAM是MySQL早期的默認存儲引擎。
- 特點
不支持事務,不支持外鍵
支持表鎖,不支持行鎖
訪問速度快
- 文件
xxx.sdi:存儲表結構信息
xxx.MYD:存儲數據
xxx.MYI:存儲索引
在sdi文件中放的是json格式語言
可以在json.cn網站翻譯為SQL語言
Memory
- 介紹
Memory引擎的表數據時存儲在內存中的,由于受到硬件問題、或斷電問題的影響,只能將這些表作為臨時表或緩存使用。
- 特點
內存存放
Hash索引(默認)
- 文件
xxx.sdi:存儲表結構信息
區別
特點 | InnoDB | MyISAM | Memory |
---|---|---|---|
存儲限制 | 64TB | 有 | 有 |
事務安全 | 支持 | - | - |
鎖機制 | 行鎖 | 表鎖 | 表鎖 |
B+tree索引 | 支持 | 支持 | 支持 |
Hash索引 | - | - | - |
全文索引 | 支持 (5.6版本之后) | 支持 | - |
空間使用 | 高 | 低 | N/A |
內存使用 | 高 | 低 | 中等 |
批量插入速度 | 低 | 高 | 高 |
支持外鍵 | 支持 | - | - |
存儲引擎選擇📕
在選擇存儲引擎時,因該根據應用系統的特點選擇合適的存儲引擎。對于復雜的應用系統,還可以根據實際情況選擇多種存儲引擎進行組合。
- InnoDB
是MySQL的默認存儲引擎支持事務、外鍵。如果應用對事務的完整性有比較高的要求,在并發條件下要求數據的一致性,數據操作除了插入和查詢之外,還包含很多更新、刪除操作,那么InnoDB存儲引擎是比較合適的選擇。
- MyISAM
如果應用是以讀操作和插入操作為主,只有很少的更新和刪除操作,并且對事務的完整性、并發性要求不是很高,那么選擇這個存儲引擎是非常合適的。
- Memory
將所有的數據保存在內存中,訪問速度快,通常用于臨時表及緩存。Memory的缺陷就是對表的大小有限制,太大的表無法緩存在內存中,而且無法保障數據的安全性。