`MySQL`分為兩部分: 層 包含連接器、查詢緩存、分析器、優化器、執行器等,涵蓋 的大多數核心服務功能,以及所有的內置函數(如日期、時間、數學和加密函數等),所有跨存儲引擎的功能都在這一層實現,比如存儲過程、觸發器、視圖等。 存儲引擎層 負責數據的存儲和提取。其架構模式是插件式的,支持 、`My ...
MySQL
分為兩部分:
Server
層
包含連接器、查詢緩存、分析器、優化器、執行器等,涵蓋MySQL
的大多數核心服務功能,以及所有的內置函數(如日期、時間、數學和加密函數等),所有跨存儲引擎的功能都在這一層實現,比如存儲過程、觸發器、視圖等。- 存儲引擎層
負責數據的存儲和提取。其架構模式是插件式的,支持InnoDB
、MyISAM
、Memory
等多個存儲引擎,MySQL 5.5.5
版本開始InnoDB
為預設的存儲引擎。
Server
層:
-
連接器
負責跟客戶端建立連接、獲取許可權、維持和管理連接mysql -h$ip -P$port -u$user -p //連接資料庫
輸入密碼後,如果用戶名或密碼不對,則會提示
Access denied for user
,如果認證通過,連接器會到許可權表裡面查出你擁有的許可權。之後,這個連接裡面的許可權判斷邏輯,都將依賴此時讀到的許可權。show processlist //顯示所有連接
-
查詢緩存
命中則直接返回結果。MySQL
拿到查詢請求後,會先到查詢緩存看看,之前是否執行過這條語句,之前執行過的語句及其結果可能會以key-value
對的形式,被直接緩存在記憶體中,key
為sql
語句,有則返回。沒有就會進行分析器以後的流程,執行完成後結果會被存入查詢緩存。當表中有執行更新操作時,則該表對應的所有查詢緩存失效。MySQL 8.0
版本直接將查詢緩存的整塊功能刪掉了。 -
分析器
詞法分析,語法分析。如果沒有命中查詢緩存,就要開始執行語句,MySQL
需要知道你要做什麼,需要對SQL
語句進行分析。
詞法分析:SQL
語句中各個字元串分別代表什麼
語法分析:判斷SQL
語句是否滿足MySQL
語法。 -
優化器
執行計劃生成,索引選擇。在表裡有多個索引時決定用哪個索引;在一個語句有多表關聯時,決定各個表的連接順序等。優化器得出幾個方案後,會選擇最好的方案。 -
執行器
操作存儲引擎,返回結果