一、MySQL的體系結構
連接層:
最上層是一些客戶端和鏈接服務,主要完成一些類似于連接處理、授權認證、及相關的安全方案。服務器也會為安全接入的每個客戶端驗證它所具有的操作權限。
服務層:
第二層架構主要完成大多數的核心服務功能,如SQL接口,并完成緩存的查詢,SQL的分析和優化,部分內置函數的執行。所有跨存儲引擎的功能也在這一層實現,如過程、函數等。?
引擎層:
存儲引擎真正的負責了MySQL中數據的存儲和提取,服務器通過API和存儲引擎進行通信。不同的存儲引擎具有不同的功能,這樣我們可以根據自己的需要,來選取合適的存儲引擎。?
存儲層:
主要是將數據存儲在文件系統之上,并完成與存儲引擎的交互。?
?二、存儲引擎簡介
存儲引擎就是存儲數據、建立索引、更新/查詢數據等技術的實現方式。存儲引擎是基于表的,而不是基于庫的,所以存儲引擎也可被稱為表類型。?
2.1在創建表時,指定存儲引擎?
?2.2查看當前數據庫支持的存儲引擎
?三、存儲引擎特點
? 3.1 InnoDB?
????????InnoDB是一種兼顧高可靠性和高性能的通用存儲引擎,在MySQL5.5之后,InnoDB是默認的MySQL存儲引擎。?
特點:
- DML操作遵循ACID模型,支持事務;
- 行級鎖,提高并發訪問性能;
- 支持外鍵FOREIGNKEY約束,保證數據的完整性和正確性;
文件:
xxx.ibd:xxx代表的是表名,innoDB引擎的每張表都會對應這樣一個表空間文件,存儲該表的表結構(frm、sdi)、數據和索引。
參數: innodb_file_per_table
表空間 (Tablespace)
????????這是 InnoDB 邏輯結構的最高層,是存儲所有數據和索引的最高級別容器。
段 (Segment)
????????表空間由一個或多個段組成。段是管理特定類型數據的邏輯存儲單元。
區 (Extent)
????????區是物理上連續的 64 個頁(Page)組成的邏輯單元。因此,一個區的大小是?
64 * 16KB = 1MB
。頁 (Page / Block)
????????頁是 InnoDB 磁盤和內存交互的最小單位。默認大小為?16KB(可通過?
innodb_page_size
?配置,但初始化后不可更改)。行 (Row)
????????行是存儲引擎中最小的邏輯存儲單元,代表表中的一條記錄。
3.2 MyISAM
????????MyISAM是MySQL早期的默認存儲引擎。
特點:
不支持事務,不支持外鍵
支持表鎖,不支持行鎖
訪問速度快
?文件:
XXX.sdi:存儲表結構信息
XXX.MYD:存儲數據
XXX.MYI:存儲索引
3.3 Memory
????????Memory引擎的表數據時存儲在內存中的,由于受到硬件問題、或斷電問題的影響,只能將這些表作為臨時表或緩存使用。?
特點:
內存存放
hash索引(默認)
文件:
XXX.sdi:存儲表結構信息
?3.4三種存儲引擎對比
?四、存儲引擎的選擇
????????在選擇存儲引擎時,應該根據應用系統的特點選擇合適的存儲引擎。對于復雜的應用系統,還可以根據實際情況選擇多種存儲引擎進行組合。
InnoDB:
是Mysql的默認存儲引擎,支持事務、外鍵。如果應用對事務的完整性有比較高的要求,在并發條件下要求數據的一致性,數據操作除了插入和查詢之外,還包含很多的更新、刪除操作,那么InnoDB存儲引擎是比較合適的選擇。
MyISAM:
如果應用是以讀操作和插入操作為主,只有很少的更新和刪除操作,并且對事務的完整性、并發性要求不是很高,那么選擇這個存儲引擎是非常合適的。
MEMORY:
將所有數據保存在內存中,訪問速度快,通常用于臨時表及緩存。MEMORY的缺陷就是對表的大小有限制,太大的表無法緩存在內存中,而且無法保障數據的安全性。