一. MySQL體系結構
1. 連接層
最上層是一些客戶端和鏈接服務,包含本地sock通信和大多數基于客戶端/服務端工具實作的類似于TCP/IP的通信,主要完成一些類似于連接處理、授權認證及相關的安全方案,在該層上引入了執行緒池的概念,為通過認證安全接入的客戶端提供執行緒,同樣在該層上可以實作基于SSL的安全鏈接,服務器也會為安全接入的每個客戶端驗證它所具有的操作權限,
2. 服務層
第二層架構主要完成大多數的核心服務功能,如SQL介面,并完成快取的查詢,SQL的分析和優化,部分內置函式的執行,所有跨存盤引擎的功能也在這一層實作,如程序、函式等,在該層,服務器會決議查詢并創建相應的內部決議樹,并對其完成相應的優化如確定表的查詢順序,是否利用索引等,最后生成相應的執行操作,如果是select陳述句,服務器還會查詢內部的快取,如果快取空間足夠大,這樣在解決大量讀操作的環境中能夠很好的提升系統的性能,
3. 引擎層
存盤引擎層,存盤引擎真正的負責了MySQL中資料的存盤和提取,服務器通過API和存盤引擎進行通信,不同的存盤引擎具有不同的功能,這樣我們可以根據自己的需求來選取合適的存盤引擎,資料庫中的索引是在存盤引擎層實作的,
4. 存盤層
資料存盤層,主要是將資料(如:redolog、undolog、資料、索引、二進制日志、錯誤日志、查詢日志、慢查詢日志等)存盤在檔案系統之上,并完成與存盤引擎的互動,
和其他資料庫相比,MySQL有點與眾不同,它的架構可以在多種不同場景中應用并發揮良好作用,主要體現在存盤引擎上,插件式的存盤引擎架構,將查詢處理和其他的系統任務以及資料的存盤提取分離,這種架構可以根據業務的需求和實際需要選擇合適的存盤引擎,
二. 存盤引擎介紹
存盤引擎就是存盤資料、建立索引、更新/查詢資料等技術的實作方式,存盤引擎是基于表的,而不是基于庫的,所以存盤引擎也可稱為表型別,我們可以在創建表的時候,來指定選擇的存盤引擎,如果沒有指定將自動選擇默認的存盤引擎,
1. 建表時指定存盤引擎
CREATE TABLE 表名(
欄位1 欄位1型別 [ COMMENT 欄位1注釋 ] ,
......
欄位n 欄位n型別 [COMMENT 欄位n注釋 ]
) ENGINE = INNODB [ COMMENT 表注釋 ] ;
(1). 案例1:查詢建表陳述句 --- 默認存盤引擎:InnoDB
show create table account;
2. 查詢當前資料庫支持的存盤引擎
show engines;
(1). 案例1:創建表my_myisam,并指定MyISAM存盤引擎
create table my_myisam(
id int,
name varchar(10)
) engine = MyISAM;
(2). 創建表my_memory,指定Memory存盤引擎
create table my_memory(
id int,
name varchar(10)
) engine = Memory;
三. 存盤引擎特點
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
show variables like 'innodb_file_per_table';
如果該引數開啟,代表對于InnoDB引擎的表,每一張表都對應一個ibd檔案,我們直接打開MySQL的資料存放目錄,這個目錄下有很多檔案夾,不同的檔案夾代表不同的資料庫,我們直接打開yun3k檔案夾,
可以看到里面有很多的idb檔案,每一個ibd檔案就對應一張表,比如:我們有一張表account,就會有這樣一個account.ibd檔案,而在這個ibd檔案中不僅存放表結構、資料、還會存放該表對應的索引資訊,而該檔案是基于二進制存盤的,不能直接基于記事本打開,我們可以使用mysql提供的一個指令ibd2sdi,通過該指令就可以從ibd檔案中提取sdi資訊,而sdi資料字典資訊中就包含該表的表結構,
(4). 邏輯存盤結構
-
表空間:InnoDB存盤引擎邏輯結構的最高層,ibd檔案其實就是表空間檔案,在表空間中可以包含多個Segment段,
-
段:表空間是由各個段組建的,常見的段有資料段、索引段、回滾段等,InnoDB中對于段的管理,都是引擎自身完成,不需要人為對其控制,一個段中包含多個區,
-
區:區是表空間的單元結構,每個區的大小為1M,默認情況下,InnoDB存盤引擎頁大小為16k,即一個區中一共有64個連續的頁,
-
頁:頁是組成區的最小單元,頁也是InnoDB存盤引擎磁盤管理的最小單元,每個頁的大小默認為16KB,為了保證頁的連續性,InnoDB存盤引擎每次從磁盤申請4-5個區,
-
行:InnoDB存盤引擎是面向行的,也就是說資料是按行進行存放的,在每一行中除了定義表時所指定的欄位以外,還包含兩個隱藏欄位(后面會詳細介紹),
2. MyISAM
(1). 介紹
MyISAM是MySQL早期的默認存盤引擎,
(2). 特點
不支持事務,不支持外鍵
支持表鎖,不支持行鎖
訪問速度快
(3). 檔案
xxx.sdi:存盤表結構資訊
xxx.MYD:存盤資料
xxx.MYI:存盤索引
3. Memory
(1). 介紹
Memory引擎的表資料是存盤在記憶體中的,由于受到硬體問題或斷電問題的影響,只能將這些表作為臨時表或快取使用,
(2). 特點
記憶體存放
hash索引(默認)
(3). 檔案
xxx.sdi:存盤表結構資訊
4. InnoDB、MyISAM和Memory的區別及特點
特點 | InnoDB | MyISAM | Memory |
---|---|---|---|
存盤限制 | 64TB | 有 | 有 |
事務安全 | 支持 | - | - |
鎖機制 | 行鎖 | 表鎖 | 表鎖 |
B+tree索引 | 支持 | 支持 | 支持 |
Hash索引 | - | - | 支持 |
全文索引 | 支持(5.6版本之后) | 支持 | - |
空間使用 | 高 | 低 | N/A |
記憶體使用 | 高 | 低 | 中等 |
批量插入速度 | 低 | 高 | 高 |
支持外鍵 | 支持 | - |
四. 存盤引擎的選擇
在選擇存盤引擎時,應該根據應用系統的特點選擇合適的存盤引擎,對于復雜的應用系統,還可以根據實際情況選擇多種存盤引擎進行結合,
-
InnoDB:是Mysql的默認存盤引擎,支持事務、外鍵,如果應用對事務的完整性有比較高的要求,在并發條件下要求資料的一致性,資料操作除了插入和查詢之外,還包含很多的更新、洗掉操作,那么InnoDB存盤引擎是比較合適的選擇,
-
MyISAM:如果應用是以讀操作和插入操作為主,只有很少的更新和洗掉操作,并且對事務的完整性、并發性要求不是很高,那么選擇這個存盤引擎是非常合適的,
-
Memory:將所有資料保存在記憶體中,訪問速度快,通常用于臨時表及快取,MEMORY的缺陷就是對表的大小有限制,太大的表無法快取在記憶體中,而且無法保障資料的安全,
更多mysql學習請關注微信公眾號”云哥技術yun3k”,回復”mysql學習”,免費領取mysql全套學習資料,
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/556655.html
標籤:MySQL
下一篇:返回列表