?MySQL架構
和其它數據庫相比,MySQL有點與眾不同,它的架構可以在多種不同場景中應用并發揮良好作用。主要體現在存儲引擎的架構上,插件式的存儲引擎架構將查詢處理和其它的系統任務以及數據的存儲提取相分離。這種架構可以根據業務的需求和實際需要選擇合適的存儲引擎。
- 連接層(應用層):最上層是一些客戶端和連接服務。主要完成一些類似于連接處理、授權認證、及相關的安全方案。在該層上引入了線程池的概念,為通過認證安全接入的客戶端提供線程。同樣在該層上可以實現基于SSL的安全鏈接。服務器也會為安全接入的每個客戶端驗證它所具有的操作權限。
- 服務層(邏輯層):第二層服務層,主要完成大部分的核心服務功能, 包括查詢解析、分析、優化、緩存、以及所有的內置函數,所有跨存儲引擎的功能也都在這一層實現,包括觸發器、存儲過程、視圖等。
- 引擎層:第三層存儲引擎層,存儲引擎真正的負責了MySQL中數據的存儲和提取,服務器通過API與存儲引擎進行通信。不同的存儲引擎具有的功能不同,這樣我們可以根據自己的實際需要進行選取
- 存儲層(物理層):第四層為數據存儲層,主要是將數據存儲在運行于該設備的文件系統之上,并完成與存儲引擎的交互。
畫出 MySQL 架構圖,這種變態問題都能問的出來 MySQL 的查詢流程具體是?or 一條SQL語句在MySQL中如何執行的?
客戶端請求
---> 連接器(驗證用戶身份,給予權限)
---> 查詢緩存(存在緩存則直接返回,不存在則執行后續操作)
---> 分析器(對SQL進行詞法分析和語法分析操作)
---> 優化器(主要對執行的sql優化選擇最優的執行方案方法)
---> 執行器(執行時會先看用戶是否有執行權限,有才去使用這個引擎提供的接口)
---> 去引擎層獲取數據返回(如果開啟查詢緩存則會緩存查詢結果)
MySQL表存儲結構
單位:表>段>區>頁>行
在數據庫中,不論讀一行,還是讀多行,都是將這些行所在的頁進行加載。也就是說存儲空間的基本單位是頁。
一個頁就是一棵樹B+樹的節點,數據庫I/O操作的最小單位是頁,與數據庫相關的內容都會存儲在頁的結構里。
參考:
zhuanlan.zhihu.com/p/29150809
juejin.im/post/5e3eb6…
blog.csdn.net/yin76783337…