麻雀雖小,五臟俱全。MySQL 雖然以簡單著稱,但其內部結構并不簡單,本節主要介紹 MySQL 的整體架構組成。
學習 MySQL 就好比蓋房子,如果想把房子蓋的特別高,地基一定要穩,基礎一定要牢固。學習 MySQL 數據庫前要先了解它的內部結構,這是學好 MySQL 數據庫的前提。
MySQL 由連接池、SQL 接口、解析器、優化器、緩存、存儲引擎等組成,可以分為三層,即 MySQL Server 層、存儲引擎層和文件系統層。MySQL Server 層又包括連接層和 SQL 層。如下是官方文檔中 MySQL 的基礎架構圖:

MySQL基礎架構圖
上圖中,Connection pool? 為連接層,Management Services & Utilities ...Caches & Buffers 為 SQL 層,Pluggable Storage Engines 為存儲引擎層,File system、Files & Logs 為文件系統層。
Co?nnectors 不屬于以上任何一層,可以將 Co?nnectors 理解為各種客戶端、應用服務,主要指的是不同語言與 SQL 的交互。
#### 1\. 連接層
應用程序通過接口(如 ODBC、JDBC)來連接 MySQL,最先連接處理的是連接層。連接層包括通信協議、線程處理、用戶名密碼認證 3 部分。
* 通信協議負責檢測客戶端版本是否兼容 MySQL 服務端。
* 線程處理是指每一個連接請求都會分配一個對應的線程,相當于一條 SQL 對應一個線程,一個線程對應一個邏輯 CPU,在多個邏輯 CPU 之間進行切換。
* 密碼認證用來驗證用戶創建的賬號、密碼,以及 host 主機授權是否可以連接到 MySQL 服務器。
Connection Pool(連接池)屬于連接層。由于每次建立連接都需要消耗很多時間,連接池的作用就是將用戶連接、用戶名、密碼、權限校驗、線程處理等需要緩存的需求緩存下來,下次可以直接用已經建立好的連接,提升服務器性能。
#### 2\. SQL層
SQL 層是 MySQL 的核心,MySQL 的核心服務都是在這層實現的。主要包含權限判斷、查詢緩存、解析器、預處理、查詢優化器、緩存和執行計劃。
* 權限判斷可以審核用戶有沒有訪問某個庫、某個表,或者表里某行數據的權限。
* 查詢緩存通過 Query Cache 進行操作,如果數據在 Query Cache 中,則直接返回結果給客戶端,不必再進行查詢解析、優化和執行等過程。
* 查詢解析器針對 SQL 語句進行解析,判斷語法是否正確。
* 預處理器對解析器無法解析的語義進行處理。
* 查詢優化器對 SQL 進行改寫和相應的優化,并生成最優的執行計劃,就可以調用程序的 API 接口,通過存儲引擎層訪問數據。
Management Services & Utilities、SQL Interface、Parser、Optimizer 和?Caches & Buffers?屬于 SQL 層,詳細說明如下表所示。
| 名稱 | 說明 |
| --- | --- |
| Management Services & Utilities? | MySQL 的系統管理和控制工具,包括備份恢復、MySQL 復制、集群等。 |
| SQL Interface(SQL 接口) | 用來接收用戶的 SQL 命令,返回用戶需要查詢的結果。例如 SELECT FROM 就是調用 SQL Interface。 |
| Parser(查詢解析器) | 在 SQL 命令傳遞到解析器的時候會被解析器驗證和解析,以便 MySQL 優化器可以識別的數據結構或返回 SQL 語句的錯誤。 |
| Optimizer(查詢優化器) | SQL 語句在查詢之前會使用查詢優化器對查詢進行優化,同時驗證用戶是否有權限進行查詢,緩存中是否有可用的最新數據。它使用“選取-投影-連接”策略進行查詢。 例如?`SELECT id, name FROM student WHERE gender = "女";`語句中,SELECT 查詢先根據 WHERE 語句進行選取,而不是將表全部查詢出來以后再進行 gender 過濾。SELECT 查詢先根據 id 和 name 進行屬性投影,而不是將屬性全部取出以后再進行過濾,將這兩個查詢條件連接起來生成最終查詢結果。 |
| Caches & Buffers(查詢緩存) | 如果查詢緩存有命中的查詢結果,查詢語句就可以直接去查詢緩存中取數據。這個緩存機制是由一系列小緩存組成的,比如表緩存、記錄緩存、key 緩存、權限緩存等。 |
#### 3\. 存儲引擎層
Pluggable Storage Engines 屬于存儲引擎層。存儲引擎層是 MySQL 數據庫區別于其他數據庫最核心的一點,也是 MySQL 最具特色的一個地方。主要負責 MySQL 中數據的存儲和提取。
因為在關系數據庫中,數據的存儲是以表的形式存儲的,所以存儲引擎也可以稱為表類型(即存儲和操作此表的類型)。
#### 4\. 文件系統層
文件系統層主要是將數據庫的數據存儲在操作系統的文件系統之上,并完成與存儲引擎的交互。
說明:學習閱讀完本節內容,了解 MySQL 體系結構即可,教程后面會詳細介紹每個模塊。
- 數據庫入門
- 1.常用的數據庫
- 2.數據管理技術的3個發展階段
- 3.數據庫是什么?關系型數據庫和非關系型數據庫又是什么?
- 4.為什么要使用數據庫?
- 5.數據庫系統是什么?它由哪幾部分組成?
- 6.常用數據庫訪問接口簡介
- 7.數據庫的種類有哪些?
- 8.幾種常用的數據庫
- 9.MySQL是什么
- 10.MySQL適用于哪些場景?
- 11.學MySQL前,需要了解這些數據庫專業術語
- 12.MySQL客戶端和服務器架構(C/S架構)
- 13.明白了MySQL內部結構才能成為高手!
- 14.如何學習數據庫(新手必看)?
- 15.小白學習MySQL需要多長時間,能從事哪方面的工作?
- 16.當前市場對數據庫程序員的需求如何?待遇如何?
- 17.DBA到底要做什么,成為一名DBA需要具備什么能力?
- 一、數據庫的概念和常用工具
- 二、MySQL規范、配置及登錄退出操作
- 三、MySQL中的數據類型
- 四、數據庫增查改刪等操作
- 五、數據表增查改刪操作
- 六、MySQL數據增查改刪操作
- 七、MySQL存儲引擎
- 八、MySQL常用函數
- MySQL的安裝和配置
- 1.MySQL 5.7的新特性(新功能)
- 2.MySQL下載步驟詳解
- 3.MySQL安裝配置教程(Windows系統)
- 4.MySQL免安裝版配置教程
- 5.MySQL配置環境變量
- 6.安裝MySQL后,如何判斷是否已安裝成功
- 7.啟動MySQL服務的兩種方式(圖解)
- 8.登錄MySQL數據庫
- 9.對Linux MySQL軟件包的一些說明
- 10.Linux CentOS卸載MySQL(Linux安裝MySQL前的準備)
- 11.Linux安裝配置MySQL詳細步驟
- 12.MySQL my.cnf配置文件詳解
- 13.MySQL常用圖形化管理工具
- 14.MySQL安裝后的目錄結構介紹
- 15.MySQL數據庫文件存放目錄結構詳解
- 16.MySQL配置文件(my.ini)詳解
- 17.與其它數據庫不同,MySQL可以在不同的SQL模式下運行
- 18.MySql Command Line Client閃退原因及解決方案
- MySQL數據庫的基本操作
- 1.SQL是什么?它能做什么?
- 2.SQL的基本書寫規則
- 3.MySQL查看或顯示數據庫(SHOW DATABASES語句)
- 4.MySQL創建數據庫(CREATE DATABASE語句)
- 5.MySQL修改數據庫:ALTER DATABASE用法簡介
- 6.MySQL刪除數據庫(DROP DATABASE語句)
- 7.MySQL選擇數據庫(MySQL USE語句)
- 8.MySQL注釋:單行注釋和多行注釋
- 9.MySQL中SQL語句的大小寫規則
- 10.如何查看MySQL系統幫助?
- 11.看懂SQL錯誤代碼,提高學習效率!
- 數據庫高級
- 一、視圖的操作
- 二、觸發器的操作
- 三、事務的操作
- 四、索引的操作
- 五、存儲過程的操作
- 六、數據庫的優化方案
- 1.分庫、分表和索引
- 2.讀寫分離和查詢優化
- 3.join代替子查詢
- 4.盡量使用短小的事務
- 5.常用小技巧
- MySQL使用注意事項
- 1.字符亂碼及連接驅動