最近在學習做者小孩子的掘金專欄《MySQL是怎樣運行的:從根兒上理解MySQL》,現將學習心得總結梳理爲一個系列。mysql
Mysql有三種鏈接方式,包括:sql
Mysql會限制同時鏈接服務器的數量,系統變量(後面咱們在解釋什麼是系統變量、還有狀態變量):max_connections表示的是最大鏈接數(默認151)。數據庫
Mysql8.0以前會對查詢結果創建緩存,第二次使用一樣的語句查詢時會先看緩存裏面有沒有,若是有直接返回查詢結果。windows
注:從MySQL 5.7.20開始,不推薦使用查詢緩存,並在MySQL 8.0中刪除(我的以爲,項目小併發量不是很高的能夠用,可是併發量不高,相對來講緩不緩存其實影響也不大。可是項目大,數據變動頻繁,緩存的開銷就會很大,因此不管項目大小,保持關閉狀態都是能夠的)緩存
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。學習