存儲引擎
MySQL體系結構
- 連接層:與客戶端連接,權限校驗、連接池
- 服務層:SQL接口和解析、查詢優化、緩存、函數
- 引擎層:索引、存儲引擎
- 存儲層:系統文件、日志(Redo、Undo等)
存儲引擎介紹
不同的引擎有不同的應用場景
存儲引擎就是存儲數據、建立索引、更新/查詢數據等技術的實現方式。
存儲引擎是基于表的,而不是基于庫的,所以存儲引擎也可被稱為表類型。
默認:InnoDB
查詢建表語句
show create table account;
查看數據庫支持的存儲引擎
show engines;
- memory
- MyISAM
- InnoDB
創建表并指定 MyISAM 存儲引擎
create table account(id int,name varchar(10)
) engine = MyISAM;
存儲引擎簡介
InnoDB
InnoDB是一種兼顧高可靠性和高性能的通用存儲引擎。
特點:
- DML(數據增刪改查)操作遵循ACID模型,支持事務
- 行級鎖,提高并發訪問性能
- 支持外鍵 FOREIGN KEY約束,保證數據的完整性和正確性
文件:
每張表對應一個表空間文件 xxx.ibd
,存儲表結構、數據和索引。
InnoDB邏輯存儲結構:
MyISAM
MyISAM:MySQL早期的默認存儲引擎。
特點:
- 不支持事務,不支持外鍵
- 支持表鎖,不支持行鎖
- 訪問速度快
文件:
xxx.sdi
: 存儲表結構信息xxx.MYD
: 存儲數據xxx.MYI1
: 存儲索引
Memory
Memory 引擎的表數據時存儲在內存中的,只能將這些表作為臨時表或緩存使用。
特點:
- 內存存放
- hash索引(默認)
文件:xxx.sdi
存儲表結構信息
存儲引擎的選擇
InnoDB:應用對事務的完整性有比較高的要求,在并發條件下要求數據的一致性,數據操作除了插入和查詢之外,還包含很多的更新、刪除操作。
MyISAM:應用是以讀操作和插入操作為主,只有很少的更新和刪除操作,并且對事務的完整性、并發性要求不是很高。
MEMORY:數據保存在內存中,訪問速度快,通常用于臨時表及緩存。缺點就是對表的大小有限制,太大的表無法緩存在內存中,而且無法保障數據的安全性。
MyiSAM -> MongoDB
MEMORY -> Redis