一、Mysql體繫結構 1.1、連接層 最上層是一個客戶端和鏈接服務,主要完成一些類似於鏈接處理,授權認證,及相關的安全方案,伺服器也會為安全接入的而每個客戶端驗證它所具有的操作許可權 1.2、服務層 第二層架構主要完成大多數的核心服務功能,如SQL介面,並完成緩存的查詢,SQL的分析和優化,部分內置 ...
一、Mysql體繫結構
1.1、連接層
最上層是一個客戶端和鏈接服務,主要完成一些類似於鏈接處理,授權認證,及相關的安全方案,伺服器也會為安全接入的而每個客戶端驗證它所具有的操作許可權
1.2、服務層
第二層架構主要完成大多數的核心服務功能,如SQL介面,並完成緩存的查詢,SQL的分析和優化,部分內置函數的執行,所有跨存儲引擎的功能葉子啊這一層實現如函數等。
1.3、引擎層
存儲引擎真正的負責了Mysql中數據的存儲和提起,伺服器通過api和存儲引擎進行通信,不同的存儲引擎具有不同的功能,這樣我們可以根據自己的需要,來選取合適的存儲引擎
1.4、存儲層
主要是將數據存儲在文件系統之上,並完成與存儲引擎的交互
二、存儲引擎介紹
2.1、簡介:
存儲引擎就是存儲數據,建立索引,更新/查詢數據等技術的實現方式,存儲引擎是基於表的,而不是基於庫的,所以存儲引擎也可以被稱為表類型
2.2、指定引擎語法
create table 表名( 欄位1 欄位1類型 [comment 欄位1註釋], ...... 欄位2 欄位n類型 [comment 欄位n註釋] )engine=InnoDB [comment 表註釋];
說明:mysql5.5之後預設的儲存引擎就是InnoDB類型
2.3、查看資料庫支持的存儲引擎類型:show engines;
mysql> show engines; +--------------------+---------+----------------------------------------------------------------+--------------+------+------------+ | Engine | Support | Comment | Transactions | XA | Savepoints | +--------------------+---------+----------------------------------------------------------------+--------------+------+------------+ | ARCHIVE | YES | Archive storage engine | NO | NO | NO | | BLACKHOLE | YES | /dev/null storage engine (anything you write to it disappears) | NO | NO | NO | | MRG_MYISAM | YES | Collection of identical MyISAM tables | NO | NO | NO | | FEDERATED | NO | Federated MySQL storage engine | NULL | NULL | NULL | | MyISAM | YES | MyISAM storage engine | NO | NO | NO | | PERFORMANCE_SCHEMA | YES | Performance Schema | NO | NO | NO | | InnoDB | DEFAULT | Supports transactions, row-level locking, and foreign keys | YES | YES | YES | | MEMORY | YES | Hash based, stored in memory, useful for temporary tables | NO | NO | NO | | CSV | YES | CSV storage engine | NO | NO | NO | +--------------------+---------+----------------------------------------------------------------+--------------+------+------------+ 9 rows in set (0.01 sec)
三、InnoDB引擎
3.1、Innodb引擎介紹
InnoDB是一種兼顧高可靠性和高性能的通用存儲引擎,在Mysql5.5之後,InnoDB是預設的Mysql存儲引擎
3.2 InnoDB引擎特點
-
- DML操作遵循ACID模型,支持事務;
- 行級鎖,提高併發訪問性能
- 支持外鍵foreign key約束,保證數據的完整性和正確性
3.3 InnoDB引擎文件
xxx.ibd: xxx代表表名,InnoDB引擎的每張表都會對應這樣一個表空間文件,存儲該表的表結構(frm,sdi)、數據和索引
參數:innodb_file_per_table 預設打開的,每一張表都有一個獨立的表結構
3.4 InnoDB引擎的邏輯存儲結構
四、MyISAM引擎
4.1 MyISAM引擎介紹
MyISAM是Mysql5.5以前的預設儲存
4.2 MyISAM引擎特點
-
- 不支持事務,不支持外鍵
- 支持表鎖,不支持行鎖
- 訪問速度快
4.3 MyISAN引擎文件
-
- xxx.sdi:儲存表結構信息
- xxx.MYD:儲存數據
- xxx.MYI:儲存索引
五、Memory引擎
5.1 Memory引擎介紹
Memory引擎的表數據是存儲在記憶體中的,由於收到硬體問題,或斷電問題的影響,只能將這些表作為臨時表或者緩存表使用
5.2 Memory引擎特點
-
- 記憶體存放,讀取速度塊
- hash索引
5.3 Memory文件
xxx.sdi:存儲表結構信息
六、儲存引擎特點對比
七、存儲引擎選擇
1、InnoDB引擎
InnoDB是Mysql的預設儲存引擎,支持事務,外鍵,如果應用對事務的完整性有比較高的要求,併發條件下要求數據的一致性,數據操作除了插入和查詢之外,還包括很多的更新,刪除操作,那麼InnoDB儲存引擎是比較合適的選擇。
2、MyISAM引擎
如果是以讀操作和插入操作為主,只有很少的更新和刪除操作,並且對事務的完整性,併發性要求不是很高,那麼選擇這個儲存引擎是非常合適的,
3、Memory引擎
將所有的數據保存在記憶體中,訪問速度塊,通常用於臨時表及緩存,Memory的缺陷就是對錶的大小限制,太大的表無法緩存在記憶體中,而且無法保障數據的安全性。
侯哥語錄:我曾經是一個職業教育者,現在是一個自由開發者。我希望我的分享可以和更多人一起進步。分享一段我喜歡的話給大家:"我所理解的自由不是想乾什麼就乾什麼,而是想不幹什麼就不幹什麼。當你還沒有能力說不得時候,就努力讓自己變得強大,擁有說不得權利。"