存儲引擎 一. MySQL體繫結構 MySQL Server 連接層:連接的處理、認證授權、安全方案、檢查是否超過最大連接數等。 服務層:SQL介面、解析器、查詢優化器、緩存 引擎層:引擎是數據存儲和提取的方式,引擎層有許多引擎可供使用,也可以自定義引擎。索引是在存儲引擎層實現的。 存儲層:存儲數據 ...
存儲引擎
一. MySQL體繫結構
- MySQL Server
- 連接層:連接的處理、認證授權、安全方案、檢查是否超過最大連接數等。
- 服務層:SQL介面、解析器、查詢優化器、緩存
- 引擎層:引擎是數據存儲和提取的方式,引擎層有許多引擎可供使用,也可以自定義引擎。索引是在存儲引擎層實現的。
- 存儲層:存儲資料庫的相關數據,包括數據與日誌等。
二. 存儲引擎簡介
什麼是存儲引擎?
存儲引擎是存儲數據、建立索引、更新/查詢數據等技術的實現方式。
存儲引擎是基於表的,而不是基於庫的,所以存儲引擎也可被稱為表類型。
- MySQL 5.5 之後預設存儲引擎為InnoDB。
1. 在創建表時指定存儲引擎
create table {表名}(
...
)engine = {存儲引擎} ...;
2. 查看當前資料庫支持的存儲引擎
show engines;
三. 存儲引擎特點
1. InnoDB
InnoDB是一種兼顧高可靠性和高性能的通用存儲引擎,在MySQL 5.5 之後,InnoDB是預設的MySQL存儲引擎。
1.1 特點
- DML操作遵循ACID模型,支持事務;
- 行級鎖,提高併發訪問性能;
- 支持外鍵FOREIGN KEY約束,保證數據的完整性和準確性;
1.2 文件
xxx.ibd:xxx代表表名,innoDB引擎的每張表都會對應這樣一個表空間文件,存儲該表的表結構(frm、sdi)、數據和索引。
- 參數:innodb_file_per_table:決定是多張表共用一個共用表空間還是每個表都對應一個表空間,目前預設是打開的(每個表都對應一個表空間文件)
1.3 邏輯存儲結構
- TableSpace:表空間
- Segment:段
- Extent:區(大小固定:1M)(一個區包含64個頁)
- Page:頁(大小固定:16K)
- Row:行
2. MyISAM
MyISAM是MySQL早期的預設存儲引擎
2.1 特點
- 不支持事務,不支持外鍵
- 支持表鎖,不支持行鎖
- 訪問速度快
2.2 文件
- .MYD:表中存放的數據
- .MYI:索引
- .sdi:存儲表結構信息
3. Memory
Memory引擎的表數據是存儲在記憶體中的,由於受到硬體問題、或斷電問題的影響,只能將這些表作為臨時表或緩存使用。
3.1 特點
- 記憶體存放(快)
- hash索引(預設)
3.2 文件
xxx.sdi:存儲表結構信息
數據索引在記憶體中。
四. 存儲引擎選擇
選擇存儲引擎時,應該根據應用系統的特點選擇合適的存儲引擎。
對於複雜的應用系統,還可以根據實際情況選擇多種存儲引擎進行組合。