首頁 > 軟體

一文搞懂MySQL執行機制原理

2022-10-02 14:01:48

前言

前文我們瞭解了MySQL採用使用者端/伺服器架構,使用者通過使用者端程式傳送增刪改查需求,伺服器程式收到請求後處理,並且把處理結果返回給使用者端。這篇文章主要看下MySQL伺服器端是如何處理使用者端的請求,感興趣的小夥伴們可以參考借鑑,希望對大家能有所幫助。

MySQL伺服器體系架構

MySQL Server架構自頂向下大致可以分網路連線層、服務層、儲存引擎層和系統檔案層。

網路連線層

使用者端聯結器:提供與MySQL伺服器建立的支援。

服務層

主要包含系統管理和控制工具、連線池、SQL介面、解析器、查詢優化器和快取六個部分。

  • 1) 連線池:儲存和管理使用者端與資料庫的連線。
  • 2) 系統管理和控制工具:叢集、備份、安全管理。
  • 3) SQL介面:接受使用者端傳送的各種SQL命令並返回查詢結果。
  • 4) 解析器:解析SQL,生成一顆解析樹,驗證SQL是否合法。
  • 5) 查詢優化器:將解析樹轉化成執行計劃,與儲存引擎進行互動。
  • 6) 快取:各種快取,比如表、記錄、許可權等等,快取有命中查詢結果直接返回。

儲存引擎層

負責MySQL中資料的儲存與提取,與底層系統檔案進行互動,可插拔,常見的兩類:MyISAM和InnoDB。

系統檔案層

負責將資料庫的資料和紀錄檔儲存在檔案系統之上,並完成與儲存引擎的互動,比如紀錄檔、組態檔等等。

伺服器處理使用者端請求

使用者端可以向伺服器傳送增刪改查等各類請求,我們來看一下伺服器是如何處理使用者端傳送的請求。

連線管理

使用者端與伺服器程序建立連線,每當有一個使用者端程序連線到伺服器程序時,伺服器程序都會建立一個執行緒來專門處理與這個使用者端的互動,當該使用者端退出時會與伺服器斷開連線,伺服器會把執行緒快取起來。

解析與優化

查詢快取

如果兩個查詢請求在任何字元上的不同都會導致快取不命中。請求中包含某些系統函數、使用者自定義變數和函數、一些系統表也不會被快取。

只要該表的結構或者資料被修改,則該表的所有快取記憶體查詢都將無效並刪除。

PS:8.0中查詢快取已經刪除了

語法解析

如果查詢快取沒有命中,就進入查詢階段,伺服器先對文字做分析,判斷語法是否正確,然後從文字中將要查詢的表、各種查詢條件都提取出來放到內部使用的一些資料結構上。

算是一個編譯過程,涉及詞法解析、語法分析、語意分析等階段。

查詢優化

對SQL做優化,生成一個執行計劃,表明了應該使用哪些索引進行查詢,表之間的連線順序是怎樣的。

我們可以使用Explain來檢視某個語句的執行計劃。

儲存引擎

完成查詢優化之後還沒有真正去存取真實的資料表,資料的儲存和提取操作都封裝到了這個模組裡。不同儲存引擎管理的表具體的儲存結構可能不同,採用存取演演算法也可能不同。

小結

MySQL Server架構自頂向下大致可以分網路連線層、服務層、儲存引擎層和系統檔案層。mysql執行查詢的過程如下:

  • 使用者端先傳送查詢語句給伺服器
  • 伺服器檢查快取,如果存在則返回
  • 進行sql解析,生成解析樹,再預處理,生成第二個解析樹,最後再經過優化器,生成真正的執行計劃
  • 根據執行計劃,呼叫儲存引擎的API來執行查詢
  • 將結果返回給使用者端。

到此這篇關於一文搞懂MySQL執行機制原理的文章就介紹到這了,更多相關MySQL執行機制內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!


IT145.com E-mail:sddin#qq.com