# mysql 從邏輯架構(gòu)學(xué)習(xí)MySQL

我們常用MySQL的查詢 select ?* from table where id =10,但是只了解表象。內(nèi)部是如何運(yùn)行的呢,需要理解MySQL的基礎(chǔ)架構(gòu)。

MySQL邏輯架構(gòu)圖

分為Service層和存儲(chǔ)引擎層,Service層做邏輯判斷,存儲(chǔ)引擎層放入或者取出數(shù)據(jù)。

下面講解:select * from T where id = 10 執(zhí)行流程

1、客戶端連接mysq服務(wù)器

? ? mysql -h -p -u -p ,會(huì)進(jìn)行用戶登錄驗(yàn)證,用戶權(quán)限驗(yàn)證

2、查詢緩存(不一定有該流程)

????是對(duì)查詢結(jié)果的緩存,之前執(zhí)行過(guò)的SQL查詢結(jié)果的Key-value值。不推薦使用,因?yàn)楸斫Y(jié)構(gòu)或者數(shù)據(jù)發(fā)生改變時(shí)都會(huì)失效。

3、分析器

? ? 分析這條sql語(yǔ)句,語(yǔ)法的正確性,判斷語(yǔ)句類型(查詢還是更新),識(shí)別表名,列名,執(zhí)行的關(guān)鍵字。例如:select 執(zhí)行查找的關(guān)鍵字,T為表名,id是列名。

4、優(yōu)化器

? ? 選擇這表sql語(yǔ)句的執(zhí)行方式,例如選擇索引,或者連接查詢時(shí)先執(zhí)哪張表的連接查詢。

5、執(zhí)行器

? ? 分析器決定了做什么,優(yōu)化器決定了怎么做,輪到執(zhí)行器執(zhí)行sql語(yǔ)句了。

? ? 首先,判斷用戶對(duì)這張表的執(zhí)行權(quán)限,然后根據(jù)表的引擎定義調(diào)用該引擎的接口去T表做查詢,沒(méi)有建索引的表會(huì)一行行查詢Id字段是否為10,將找到的多行記錄放到結(jié)果集中,最后返回給客戶端。

?著作權(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)容