【極客時(shí)間課程筆記,圖非原創(chuàng)】
MySQL邏輯框架
- server層:如圖,所有跨存儲(chǔ)引擎的功能都在這一層實(shí)現(xiàn),比如存儲(chǔ)過(guò)程、觸發(fā)器、視圖等
- 存儲(chǔ)引擎層:負(fù)責(zé)數(shù)據(jù)的存儲(chǔ)和提取。其架構(gòu)模式是插件式的,支持InnoDB、MySIAM、Memory等多個(gè)存儲(chǔ)引擎。最常用的是InnoDB(從5.5.5版開(kāi)始成為默認(rèn))。

MySQL邏輯框架
【長(zhǎng)連接 vs 短連接】
- 長(zhǎng)連接:連接成功后,如果客戶(hù)端持續(xù)有請(qǐng)求,則一直使用同一個(gè)連接
- 短連接:每次執(zhí)行完很少的幾次查詢(xún)就斷開(kāi)連接,下次查詢(xún)?cè)俳⒁粋€(gè)
【tips】
- 建立連接的過(guò)程比較復(fù)雜,建議減少建立連接的動(dòng)作。
- 但是使用長(zhǎng)連接占內(nèi)存很快,因?yàn)閙ysql再執(zhí)行過(guò)程中臨時(shí)使用的內(nèi)存是管理再連接對(duì)象里的,這些資源在斷開(kāi)連接的時(shí)候才釋放。解決辦法:(1)定期斷開(kāi)長(zhǎng)連接;(2)mysql5.7版本支持mysql_reset_connection來(lái)重新初始化連接資源
分析器
詞法分析 - > 語(yǔ)法分析
優(yōu)化器
表里有多個(gè)索引的時(shí)候,決定用哪個(gè)索引;或者一個(gè)語(yǔ)句有多表關(guān)聯(lián)(join)的時(shí)候,決定各個(gè)表的連接順序
執(zhí)行器
MySQL通過(guò)分析器知道了你要做什么,通過(guò)優(yōu)化器知道了該怎么做,于是進(jìn)入執(zhí)行器執(zhí)行。
select * from T where ID=10;
- 首先判斷對(duì)表T有沒(méi)有執(zhí)行權(quán)限,如果有進(jìn)入2
- 調(diào)用InnoDB引擎接口取表的第一行,判斷condition,如果是則存入結(jié)果集,不是就跳過(guò)。-> step 3;
- 調(diào)用引擎接口取“下一行”,重復(fù)condition判斷,直到取到最后一行;
- 結(jié)果集返回給客戶(hù)端