架構(gòu)圖
MySQL架構(gòu)總圖
連接層
- 當(dāng)MySQl啟動(MySQL服務(wù)器就是一個進(jìn)程),等待客戶端連接咒锻,每一個客戶端連接請求比规,服務(wù)器都會新建一個線程處理(如果是線程池的話,則是分配一個新的線程)讥邻,每個線程獨(dú)立迫靖,擁有各自的內(nèi)存處理空間院峡。當(dāng)多個連接同時查詢的時候沒事,但是如果多個連接同時修改數(shù)據(jù)就會有數(shù)據(jù)同步的問題系宜。
- 連接到服務(wù)器照激,服務(wù)器需要對其進(jìn)行驗(yàn)證,包括用戶名盹牧,密碼俩垃,IP。一旦連接成功汰寓,還要驗(yàn)證是否具有執(zhí)行某個特定操作的權(quán)限
SQL處理層
-
這一層的功能主要有:SQL語句的解析口柳、優(yōu)化、緩存的查詢踩寇,MySQL內(nèi)置函數(shù)的實(shí)現(xiàn)啄清,跨存儲引擎功能(所謂跨存儲引擎就是說每個引擎都需提供的功能(引擎需對外提供接口))六水,例如:存儲過程俺孙、觸發(fā)器、試圖等
- 如果是查詢語句(select)掷贾,首先會查詢緩沖是否已經(jīng)有相應(yīng)的結(jié)果睛榄,有則返回結(jié)果,無則進(jìn)行下一步(如果不是查詢語句想帅,同樣跳到下一步)
- 解析查詢场靴,創(chuàng)建一個內(nèi)部數(shù)據(jù)結(jié)構(gòu)(解析樹),這個解析樹主要用來SQL語句的語義與語法解析
- 優(yōu)化SQL語句港准,例如重寫查詢旨剥,決定表的讀取順序,以及選擇需要的索引等浅缸。這一階段用戶是可以查詢的轨帜,查詢服務(wù)區(qū)優(yōu)化器是如何進(jìn)行優(yōu)化的,便于用戶重構(gòu)查詢和修改相關(guān)配置衩椒,打到最優(yōu)化蚌父。這一階段還涉及到存儲引擎,優(yōu)化器會詢問存儲引擎毛萌,比如某個操作的開銷信息苟弛、是否對特定索引有查詢優(yōu)化等。
查看查詢緩存
SHOW VARIABLES LIKE '%query_cache_type%'
解析查詢
存儲引擎
- 顯示支持的存儲引擎
SHOW ENGINES;
-
MyISAM和InnoDB的對比