目錄
一、存儲引擎
1.1 MySQL體系結構
1.2 存儲引擎介紹
1). 建表時指定存儲引擎
2). 查詢當前數據庫支持的存儲引擎
1.3 存儲引擎特點
1.3.1 InnoDB
1.3.2 MyISAM
1.3.3 Memory
1.3.4 區別及特點
1.4 存儲引擎選擇
一、存儲引擎
1.1 MySQL體系結構
1). 連接層 最上層是一些客戶端和鏈接服務,包含本地sock 通信和大多數基于客戶端/服務端工具實現的類似于 TCP/IP的通信。主要完成一些類似于連接處理、授權認證、及相關的安全方案。在該層上引入了線程 池的概念,為通過認證安全接入的客戶端提供線程。同樣在該層上可以實現基于SSL的安全鏈接。服務 器也會為安全接入的每個客戶端驗證它所具有的操作權限。
2). 服務層 第二層架構主要完成大多數的核心服務功能,如SQL接口,并完成緩存的查詢,SQL的分析和優化,部 分內置函數的執行。所有跨存儲引擎的功能也在這一層實現,如 過程、函數等。在該層,服務器會解 析查詢并創建相應的內部解析樹,并對其完成相應的優化如確定表的查詢的順序,是否利用索引等, 最后生成相應的執行操作。如果是select語句,服務器還會查詢內部的緩存,如果緩存空間足夠大, 這樣在解決大量讀操作的環境中能夠很好的提升系統的性能。
3). 引擎層 存儲引擎層, 存儲引擎真正的負責了MySQL中數據的存儲和提取,服務器通過API和存儲引擎進行通 信。不同的存儲引擎具有不同的功能,這樣我們可以根據自己的需要,來選取合適的存儲引擎。數據庫 中的索引是在存儲引擎層實現的。
4). 存儲層數據存儲層, 主要是將數據(如: redolog、undolog、數據、索引、二進制日志、錯誤日志、查詢 日志、慢查詢日志等)存儲在文件系統之上,并完成與存儲引擎的交互。 和其他數據庫相比,MySQL有點與眾不同,它的架構可以在多種不同場景中應用并發揮良好作用。主要 體現在存儲引擎上,插件式的存儲引擎架構,將查詢處理和其他的系統任務以及數據的存儲提取分離。 這種架構可以根據業務的需求和實際需要選擇合適的存儲引擎
1.2 存儲引擎介紹
存儲引擎就是存儲數據、建立索引、更新/查詢數據等技術的實現方式 。存儲引擎是基于表的,而不是 基于庫的,所以存儲引擎也可被稱為表類型。我們可以在創建表的時候,來指定選擇的存儲引擎,如果 沒有指定將自動選擇默認的存儲引擎。
1). 建表時指定存儲引擎
CREATE TABLE 表名(
字段1 字段1類型 [ COMMENT 字段1注釋 ]
, ......
字段n 字段n類型 [COMMENT 字段n注釋 ] )
ENGINE = INNODB [ COMMENT 表注釋 ] ;
2). 查詢當前數據庫支持的存儲引擎
show enginee;
INNODB是默認的存儲引擎
1.3 存儲引擎特點
1.3.1 InnoDB
1). 介紹
InnoDB是一種兼顧高可靠性和高性能的通用存儲引擎,在 MySQL 5.5 之后,InnoDB是默認的 MySQL 存儲引擎。
2). 特點
- DML操作遵循ACID模型(原子性,一致性,隔離性,持久性),支持事務;
- 行級鎖,提高并發訪問性能;
- 支持外鍵FOREIGN KEY約束,保證數據的完整性和正確性;
3). 文件
xxx.ibd:xxx代表的是表名,innoDB引擎的每張表都會對應這樣一個表空間文件,存儲該表的表結 構(frm-早期的 、sdi-新版的)、數據和索引。
參數:innodb_file_per_table
如果該參數開啟,代表對于InnoDB引擎的表,每一張表都對應一個ibd文件
4). 邏輯存儲結構
- 表空間 : InnoDB存儲引擎邏輯結構的最高層,ibd文件其實就是表空間文件,在表空間中可以 包含多個Segment段。
- 段 : 表空間是由各個段組成的, 常見的段有數據段、索引段、回滾段等。InnoDB中對于段的管 理,都是引擎自身完成,不需要人為對其控制,一個段中包含多個區。
- 區 : 區是表空間的單元結構,每個區的大小為1M。 默認情況下, InnoDB存儲引擎頁大小為 16K, 即一個區中一共有64個連續的頁。
- 頁 : 頁是組成區的最小單元,頁也是InnoDB 存儲引擎磁盤管理的最小單元,每個頁的大小默 認為 16KB。為了保證頁的連續性,InnoDB 存儲引擎每次從磁盤申請 4-5 個區。
- 行 : InnoDB 存儲引擎是面向行的,也就是說數據是按行進行存放的,在每一行中除了定義表時 所指定的字段以外,還包含兩個隱藏字段(后面會詳細介紹)。
1.3.2 MyISAM
1). 介紹
MyISAM是MySQL早期的默認存儲引擎。
2). 特點
不支持事務,不支持外鍵 支持表鎖,不支持行鎖 訪問速度快
3). 文件
xxx.sdi:存儲表結構信息
xxx.MYD: 存儲數據
xxx.MYI: 存儲索引
1.3.3 Memory
1). 介紹
Memory引擎的表數據時存儲在內存中的,由于受到硬件問題、或斷電問題的影響,只能將這些表作為 臨時表或緩存使用。
2). 特點
內存存放 hash索引(默認)
3).文件
xxx.sdi:存儲表結構信息
1.3.4 區別及特點
特點 | INNODB | MyT-SAM | Memory |
---|---|---|---|
存儲限制 | 64TB | 有 | 有 |
事務安全 | 支持 | 不支持 | 不支持 |
鎖機制 | 行鎖 | 表鎖 | 表鎖 |
B-Tree索引 | 支持 | 支持 | 支持 |
Hash索引 | 不支持 | 不支持 | 支持 |
全文索引 | 支持(5.6+) | 支持 | 不支持 |
空間使用 | 高 | 低 | N/A |
內存使用 | 高 | 低 | 中等 |
批量插入速度 | 低 | 高 | 高 |
支持外鍵 | 支持 | 不支持 | 不支持 |
面試題:
InnoDB引擎與MyISAM引擎的區別 ?
①. InnoDB引擎, 支持事務, 而MyISAM不支持。
②. InnoDB引擎, 支持行鎖和表鎖, 而MyISAM僅支持表鎖, 不支持行鎖。
③. InnoDB引擎, 支持外鍵, 而MyISAM是不支持的。
1.4 存儲引擎選擇
在選擇存儲引擎時,應該根據應用系統的特點選擇合適的存儲引擎。對于復雜的應用系統,還可以根據 實際情況選擇多種存儲引擎進行組合。
- InnoDB: 是Mysql的默認存儲引擎,支持事務、外鍵。如果應用對事務的完整性有比較高的要 求,在并發條件下要求數據的一致性,數據操作除了插入和查詢之外,還包含很多的更新、刪除操 作,那么InnoDB存儲引擎是比較合適的選擇。
- MyISAM : 如果應用是以讀操作和插入操作為主,只有很少的更新和刪除操作,并且對事務的完 整性、并發性要求不是很高,那么選擇這個存儲引擎是非常合適的。
- MEMORY:將所有數據保存在內存中,訪問速度快,通常用于臨時表及緩存。MEMORY的缺陷就是 對表的大小有限制,太大的表無法緩存在內存中,而且無法保障數據的安全性。