存儲引擎
MySQL體系結構
連接層:
-
主要接收客戶端的連接,然后完成一些鏈接的處理,以及認證授權的相關操作和安全方案,還要去檢查是否超過最大連接數等等,比如在連接MySQL服務器時需要輸入用戶名,密碼,輸入之后,連接層需要校驗用戶名與密碼,授權認證之后還需要校驗每一個客戶端所具有的權限:例如可以操作哪些數據庫,哪些表等等
服務層:
-
絕大部分的核心功能是在服務層完成的,SQL接口,查詢解析器,查詢優化器,查詢緩存,所有跨存儲引擎的功能都是在服務層完成的,如 過程,函數,等
引擎層:
-
存儲引擎控制的是MySQL中數據的存儲和提取的方式,服務器會通過API與存儲引擎來進行通信,交互。不同的存儲引擎有著不同的功能,用戶可以根據自己的需要,來選擇合適的存儲引擎,索引(index)在存儲引擎層,不同的存儲引擎 索引結構不同。InnoDB引擎是MySQL5.5之后默認的存儲引擎
存儲層:
-
主要用來存儲數據庫的相關數據,并完成與存儲引擎的交互,這里包含一系列的日志(redo日志,undo日志等等),存儲層的數據是從存儲在磁盤中
存儲引擎概述
存儲引擎就是存儲數據、建立索引、更新/查詢數據等技術的實現方式,存儲引擎是基于表的,而不是基于庫的,所以存儲引擎也可以被稱為表類型。
創建表時,指定存儲引擎的語法:
?-- 查詢建表語句show create table student;?/*CREATE TABLE `student` (`id` int NOT NULL AUTO_INCREMENT COMMENT '學號',`name` varchar(30) NOT NULL DEFAULT '匿名' COMMENT '姓名',`pwd` varchar(20) NOT NULL DEFAULT '123456' COMMENT '密碼',`sex` varchar(2) NOT NULL DEFAULT '女' COMMENT '性別',`birthday` datetime DEFAULT NULL COMMENT '出生日期',`address` varchar(100) DEFAULT NULL COMMENT '家庭住址',`email` varchar(50) DEFAULT NULL COMMENT '郵箱',PRIMARY KEY (`id`)) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3*/-- 查詢當前數據庫支持的存儲引擎show engines ;
存儲引擎特點
-
InnoDB
-
InnoDB是一種兼高可靠性與高性能的通用存儲引擎,InnoDB引擎是MySQL5.5之后默認的存儲引擎
-
-
特點
-
DML(數據操作語言)遵循ACID模型,支持事務
-
行級鎖,提高并發訪問性能
-
支持外鍵foreign key約束,保證數據的完整性與正確性
-
-
文件
-
xxx.bid:xxx代表的是表名,innodb引擎的每張表都會對應這樣一個表空間文件,存儲該表的表結構(frm,sdi)、數據和索引
-
參數:innodb_file_per_table
-
-
InnoDB
-
MyISAM
-
MyISAM是早期MySQL的默認存儲引擎
-
-
特點
-
不支持外鍵,不支持事務
-
支持表鎖,不支持行鎖
-
訪問速度快
-
-
文件
-
xxx.sdi:存儲表結構信息
-
xxx.MYD:存儲數據
-
xxx.MYI:存儲索引
-
-
Memory
-
Memory引擎的表數據是存儲在內存中的,由于受到硬件問題、或斷電問題的影響,只能將這些表作為臨時表或緩存使用
-
-
特點
-
內存存放
-
hash索引
-
訪問速度快
-
-
文件
-
xxx.sdi:存儲表結構信息
-
三種存儲引擎的區別
重點記憶:InnoDB與MyISAM的三大區別:事務安全,鎖機制,是否支持外鍵
存儲引擎選擇
在選擇存儲引擎時,應該根據應用系統的特點選擇合適的存儲引擎。對于復雜的應用系統,還可以根據實際情況選擇多種存儲引擎進行組合。
-
InnoDB:是Mysql的默認存儲引擎,支持事務、外鍵。如果應用對事務的完整性有比較高的要求,在并發條件下要求數據的一致往,數據操作除了播入和查詢之外,還包含很多的更新、刪除操作,那么noDB存儲引擎是比較合適的選擇。
-
MyISAM:如果應用是以讀操作和插入操作為主,只有很少的更新和刪除操作,并且對事務的完整性、并發性要求不是很高,那么選擇這個存儲引擎是非常合適的。
-
MEMORY:將所有數據保存在內存中,訪問速度快,通常用于臨時表及緩存。MEMORY的缺陷就是對表的大小有限制,太大的表無法緩存在內存中,而且無法保障數據的安全性
希望對大家有所幫助!