Mysql的基本架構(gòu)示意圖:
Mysql可分為:Server層——連接器油吭,查詢緩存击蹲,分析器,優(yōu)化器婉宰,執(zhí)行器等歌豺。大多數(shù)核心服務(wù)功能,內(nèi)置函數(shù)芍阎,跨存儲(chǔ)引擎的功能(存儲(chǔ)過程世曾,觸發(fā)器,視圖)
? ? ? ? ? ? ? ? ? ? ? ?存儲(chǔ)引擎層——負(fù)責(zé)數(shù)據(jù)的存儲(chǔ)和提取谴咸,是插件式的轮听,支持InnoDB,MyISAM岭佳,Memory等多種存儲(chǔ)引擎血巍。mysql5.5開始默認(rèn)存儲(chǔ)引擎為InnoDB。不同的存儲(chǔ)引擎公用一個(gè)server層珊随。
Mysql查詢語(yǔ)句的執(zhí)行過程:
第一步:先使用連接器連接到數(shù)據(jù)庫(kù)上述寡,連接器負(fù)責(zé)跟客戶端建立連接,獲取權(quán)限叶洞,維持和管理連接鲫凶。
第二步:查詢緩存,mysql拿到一個(gè)查詢請(qǐng)求后衩辟,會(huì)先查詢緩存螟炫,看之前是否執(zhí)行過這條語(yǔ)句。執(zhí)行過的語(yǔ)句和結(jié)果會(huì)以key-value對(duì)的形式艺晴,被直接緩存在內(nèi)存里昼钻。如果查詢能夠直接在緩存中找到key掸屡,那么這個(gè)value就會(huì)被當(dāng)作查詢結(jié)果返回給客戶端。Mysql8.0開始刪除了查詢緩存的功能然评。
第三步:解析SQL語(yǔ)句仅财。分析器會(huì)先做“詞法分析”,mysql需要識(shí)別出sql語(yǔ)句中的字符串分別是什么碗淌,代表什么盏求。然后進(jìn)行“語(yǔ)法分析”,語(yǔ)法分析器會(huì)根據(jù)語(yǔ)法規(guī)則贯莺,判斷sql語(yǔ)句是否滿足mysql語(yǔ)法风喇。
第四步:優(yōu)化SQL語(yǔ)句宁改。在執(zhí)行sql語(yǔ)句之前缕探,好要進(jìn)過優(yōu)化器的處理。優(yōu)化器是當(dāng)表里面有多個(gè)索引時(shí)还蹲,決定使用那個(gè)索引爹耗;or一個(gè)語(yǔ)句中有多表關(guān)聯(lián)的時(shí)候,決定表的連接順序谜喊。
第五步:開始執(zhí)行sql語(yǔ)句潭兽。首先驗(yàn)證權(quán)限,如果沒有相應(yīng)權(quán)限斗遏,返回沒有權(quán)限的錯(cuò)誤山卦;如果有權(quán)限,打開表繼續(xù)執(zhí)行诵次。打開表時(shí)账蓉,執(zhí)行器會(huì)根據(jù)表的引擎定義,使用這個(gè)引擎提供的接口執(zhí)行sql語(yǔ)句逾一。然后將所有滿足條件的記錄作為結(jié)果集返回給客戶端铸本。