Mysql系列(一)—— 簡單梳理一下Mysql的查詢流程

寫在前面

最近在學習做者小孩子的掘金專欄《MySQL是怎樣運行的:從根兒上理解MySQL》,現將學習心得總結梳理爲一個系列。mysql

Mysql查詢流程圖

Mysql查詢流程

處理鏈接

Mysql有三種鏈接方式,包括:sql

  • TCP/IP協議,遠程鏈接使用,常規可採用ip端口創建鏈接。
  • 命名管道或共享內存,windows下能夠採用命名管道或共享內存進行進程間通訊方式,但要求服務器端與鏈接客服端在同一臺機器。
  • Unix域套接字,類Unix操做系統可使用Unix域套接字文件來進行進程間通訊。

Mysql會限制同時鏈接服務器的數量,系統變量(後面咱們在解釋什麼是系統變量、還有狀態變量):max_connections表示的是最大鏈接數(默認151)。數據庫

查詢緩存

Mysql8.0以前會對查詢結果創建緩存,第二次使用一樣的語句查詢時會先看緩存裏面有沒有,若是有直接返回查詢結果。windows

注:從MySQL 5.7.20開始,不推薦使用查詢緩存,並在MySQL 8.0中刪除(我的以爲,項目小併發量不是很高的能夠用,可是併發量不高,相對來講緩不緩存其實影響也不大。可是項目大,數據變動頻繁,緩存的開銷就會很大,因此不管項目大小,保持關閉狀態都是能夠的)緩存

緩存的命中條件

  • 先後查詢語句必須同樣,兩個查詢請求在任何字符上的不一樣(例如:空格、註釋、大小寫),都會致使緩存不命中。
  • 若是查詢請求中包含某些系統函數、用戶自定義變量和函數、一些系統表,如 mysql 、information_schema、 performance_schema 數據庫中的表,那這個請求就不會被緩存。

緩存的刪除條件

MySQL的緩存系統會監測涉及到的每張表,只要該表的結構或者數據被修改,如對該表使用了INSERT、 UPDATE、DELETE、TRUNCATE TABLE、ALTER TABLE、DROP TABLE或 DROP DATABASE語句,那使用該表的全部高速緩存查詢都將變爲無效並從高速緩存中刪除。服務器

語法解析

這一階段主要是針對未命中緩存的查詢語句進行語法檢查,而且將查詢語句中使用的表、各類查詢條件都提取出來放到MySQL服務器內部使用的一些數據結構上來。數據結構

查詢優化

mysql會針對咱們書寫的查詢語句進行優化,生成一個執行計劃(能夠在查詢語句前面加explain查看執行計劃,具體執行計劃怎麼看,後面有空再總結吧),這個執行計劃能夠看到將使用哪些索引進行查詢,表之間優化後的鏈接順序等東西。併發

存儲引擎執行

MySQL從2007年開始提供了插件式的存儲引擎API,通常來講,鏈接管理、查詢緩存、語法解析、查詢優化這些並不涉及真實數據存儲的功能咱們稱爲MySQL server的功能,但真正執行查詢的是存儲引擎的功能,存儲引擎真正執行數據存取操做,存儲引擎有不少,都是基於mysql的API規範進行開發的。包括下列:函數

其中,InnoDB和MyISAM是咱們最經常使用的,Mysql的默認存儲引擎是InnoDB。學習

相關文章
相關標籤/搜索