Mysql 架構(gòu)圖

架構(gòu)圖

image.png

其中 Server 層包括連接器、分析器、查詢緩存、優(yōu)化器、執(zhí)行器,執(zhí)行器通過API進(jìn)行調(diào)用不同實(shí)現(xiàn)的存儲(chǔ)引擎

連接器

負(fù)責(zé)跟客戶端建立連接、獲取權(quán)限、維持和管理連接

查詢緩存

  1. 查詢緩存指的是查詢到結(jié)果,以查詢語句為key,查詢結(jié)果為value進(jìn)行緩存起來,下次查詢發(fā)現(xiàn)相同查詢語句,就直接取緩存進(jìn)行返回。
  2. 適用場(chǎng)景:靜態(tài)數(shù)據(jù),比如中國(guó)國(guó)家城市信息,不適合更新頻繁的數(shù)據(jù),因?yàn)楦聲r(shí)需要將緩存清除,更大更新的負(fù)擔(dān),不建議使用。
  3. 備注:Mysql 8.0 已經(jīng)將查詢緩存功能刪除

分析器

分析器主要包括詞法分析和語法分析

  1. 詞法分析主要是識(shí)別出里面的字符串分別是什么,代表什么,比如 select 表示開始查詢
  2. 語法分析是將于SQL的語句是否符合語法規(guī)則,比如 delete * from t 就會(huì)報(bào)如下錯(cuò)誤:
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '* from t' at line 1

優(yōu)化器

優(yōu)化器的工作主要是為了提升性能進(jìn)行相關(guān)的優(yōu)化處理,比如:

  1. 如果有多個(gè)索引時(shí),選擇哪個(gè)索引更加優(yōu),或者走二級(jí)索引還是走主鍵索引優(yōu)等(可能在這階段會(huì)因抽樣統(tǒng)計(jì)信息不準(zhǔn)導(dǎo)致選錯(cuò)索引)
  2. join 關(guān)聯(lián)時(shí),以哪個(gè)表作為基準(zhǔn)表會(huì)性能更高等

執(zhí)行器

執(zhí)行器就是開始執(zhí)行SQL,但是在開始執(zhí)行前會(huì)檢查用戶的權(quán)限,通過后再調(diào)用引擎接口進(jìn)行操作。舉個(gè)例子:

--- 創(chuàng)建表
CREATE TABLE t  (
  `id` bigint(20) NOT NULL AUTO_INCREMENT,
  `name` varchar(255),
  PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 1 ;
-- 查詢
select * from t where name = 'helloworld';
  1. 執(zhí)行器調(diào)用存儲(chǔ)引擎API獲取第一行數(shù)據(jù),判斷name是否相同,如果不等,忽略,否則放在結(jié)果集里面
  2. 繼續(xù)調(diào)用存儲(chǔ)引擎API獲取“下一行”,重復(fù)第一步,直到?jīng)]有下一行
  3. 執(zhí)行器將結(jié)果集返回給客戶端

本文參考極客時(shí)間的Mysql實(shí)戰(zhàn)45講

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容