溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

MySQL邏輯架構(gòu)入門(mén)介紹

發(fā)布時(shí)間:2020-05-07 16:15:53 來(lái)源:億速云 閱讀:301 作者:三月 欄目:MySQL數(shù)據(jù)庫(kù)

本文主要給大家簡(jiǎn)單講講MySQL邏輯架構(gòu)入門(mén)介紹,相關(guān)專業(yè)術(shù)語(yǔ)大家可以上網(wǎng)查查或者找一些相關(guān)書(shū)籍補(bǔ)充一下,這里就不涉獵了,我們就直奔主題吧,希望MySQL邏輯架構(gòu)入門(mén)介紹這篇文章可以給大家?guī)?lái)一些實(shí)際幫助。

一、邏輯架構(gòu)圖

MySQL邏輯架構(gòu)整體分為四層:

MySQL邏輯架構(gòu)入門(mén)介紹

第一層是鏈接線程處理,這一層并非MySQL獨(dú)有,在這一層中,主要功能有鏈接處理,授權(quán)驗(yàn)證,安全等操作。

第二層是MySQL主要層,所有的語(yǔ)句解析、分析、優(yōu)化和緩存都在這一層進(jìn)行,同時(shí)內(nèi)建函數(shù),如日期、時(shí)間等函數(shù)也在這一層進(jìn)行。

第三層中所有的跨存儲(chǔ)引擎的功能都在該層完成,例如視圖、存儲(chǔ)過(guò)程等。

第四層為存儲(chǔ)引擎,負(fù)責(zé)數(shù)據(jù)的獲取和存儲(chǔ)。在該層提供了許多API供上層服務(wù)層調(diào)用,完成數(shù)據(jù)操作。

工作過(guò)程:

每一個(gè)客戶端發(fā)起一個(gè)新的請(qǐng)求都會(huì)由云服務(wù)器端的連接線程處理層接收客戶端的請(qǐng)求并開(kāi)辟一個(gè)新的內(nèi)存空間,在該空間內(nèi)生成一個(gè)新的線程,當(dāng),當(dāng)每一個(gè)用戶連接到云服務(wù)器端的時(shí)候就會(huì)在進(jìn)程地址空間內(nèi)生成一個(gè)新的線程用于響應(yīng)客戶端請(qǐng)求,用戶發(fā)起的查詢請(qǐng)求都在線程空間內(nèi)運(yùn)行,結(jié)果也在這里面緩存并返回給云服務(wù)器端。最后線程的銷毀和重用都是由連接線程處理管理器完成的。

二、MySQL查詢過(guò)程

如下圖所示:

MySQL邏輯架構(gòu)入門(mén)介紹

1、客戶端/云服務(wù)器通信協(xié)議

該部分為半雙工狀態(tài),要么是客戶端向云服務(wù)器發(fā)送數(shù)據(jù),要么是云服務(wù)器向半雙工發(fā)送數(shù)據(jù),二者不能同時(shí)進(jìn)行。

當(dāng)客戶端向云服務(wù)器發(fā)送數(shù)據(jù)時(shí)以單獨(dú)一個(gè)數(shù)據(jù)包的形式發(fā)送,若查詢太大,云服務(wù)器會(huì)拒絕接收更多的數(shù)據(jù),并拋出異常;

當(dāng)云服務(wù)器端向客戶端發(fā)送數(shù)據(jù)包時(shí),一般包括多個(gè)數(shù)據(jù)包。客戶端必須完整的接收所有的數(shù)據(jù),不能拒絕接收部分?jǐn)?shù)據(jù)只獲取前幾條。在開(kāi)發(fā)過(guò)程中應(yīng)該盡量保持簡(jiǎn)單和必要的查詢,這也是減少select *和加上limit限制的原因。

2、查詢緩存

在解析查詢語(yǔ)句之前,如果開(kāi)啟了查詢緩存,MySQL會(huì)檢查當(dāng)前查詢是否命中緩存中的數(shù)據(jù),如果命中會(huì)直接將緩存中的數(shù)據(jù)響應(yīng)給客戶端,否則會(huì)執(zhí)行后面的解析等操作。

MySQL的緩存存放在一個(gè)引用表中,以一個(gè)哈希值作為索引。該索引包含了一系列與查詢有關(guān)的信息,例如查詢本身、要查詢的表等。如果兩個(gè)查詢?cè)谌魏我粋€(gè)字符上有所不同就不會(huì)命中緩存。當(dāng)然,不是所有的查詢都會(huì)存在緩存中,當(dāng)查詢語(yǔ)句中包含函數(shù)、用戶變量、臨時(shí)表時(shí)就不會(huì)存入緩存。例如,一個(gè)查詢語(yǔ)句中包含NOW()函數(shù),不同的時(shí)間查詢會(huì)有不同的查詢結(jié)果,存入緩存毫無(wú)意義,所以該查詢就不會(huì)被存入緩存。

MySQL的緩存也存在失效的狀態(tài),所有會(huì)影響查詢結(jié)果的信息都會(huì)糅合進(jìn)一個(gè)哈希值作為索引,所以當(dāng)某一個(gè)表的數(shù)據(jù)或者結(jié)構(gòu)發(fā)生變化時(shí),該表所涉及到的所有緩存都會(huì)失效。即對(duì)某表執(zhí)行寫(xiě)操作時(shí),該表所涉及到的緩存就會(huì)被設(shè)置為失效。當(dāng)查詢緩存非常大時(shí),這個(gè)操作會(huì)造成較大的系統(tǒng)消耗。在讀操作時(shí),每一個(gè)查詢語(yǔ)句執(zhí)行前都會(huì)檢查是否命中緩存,執(zhí)行后都會(huì)存入緩存。是否打開(kāi)緩存應(yīng)慎之又慎。

3、語(yǔ)法解析及預(yù)處理

語(yǔ)法解析會(huì)將查詢語(yǔ)句進(jìn)行解析生成一顆解析樹(shù),這個(gè)過(guò)程主要是通過(guò)語(yǔ)法進(jìn)行檢查。預(yù)處理會(huì)將解析樹(shù)再次進(jìn)行解析,會(huì)檢查查詢所包含的表、列等是否存在。

4、查詢優(yōu)化

一條語(yǔ)句有多中實(shí)現(xiàn)方式,優(yōu)化器的作用就是評(píng)估某種執(zhí)行成本并且選擇成本最小的那一個(gè)。當(dāng)然,我們所預(yù)想的執(zhí)行方式,不一定就是MySQL真正的執(zhí)行方式。優(yōu)化器會(huì)對(duì)執(zhí)行順序進(jìn)行重新排序并執(zhí)行,選出MySQL認(rèn)為的最優(yōu)解。

MySQL的查詢優(yōu)化器是一個(gè)非常復(fù)雜的部件,它使用了非常多的優(yōu)化策略來(lái)生成一個(gè)最優(yōu)的執(zhí)行計(jì)劃:   1. 重新定義表的關(guān)聯(lián)順序(多張表關(guān)聯(lián)查詢時(shí),并不一定按照SQL中指定的順序進(jìn)行,但有一些技巧可以指定關(guān)聯(lián)順序)

   2. 優(yōu)化MIN()和MAX()函數(shù)(找某列的最小值,如果該列有索引,只需要查找B+Tree索引最左端,反之則可以找到最大值,具體原理見(jiàn)下文)

  3. 提前終止查詢(比如:使用Limit時(shí),查找到滿足數(shù)量的結(jié)果集后會(huì)立即終止查詢)

  4. 優(yōu)化排序(在老版本MySQL會(huì)使用兩次傳輸排序,即先讀取行指針和需要排序的字段在內(nèi)存中對(duì)其排序,然后再根據(jù)排序結(jié)果去讀取數(shù)據(jù)行,而新版本采用的是單次傳輸排序,也就是一次讀取所有的數(shù)據(jù)行,然后根據(jù)給定的列排序。對(duì)于I/O密集型應(yīng)用,效率會(huì)高很多)

5、查詢執(zhí)行引擎

查詢執(zhí)行引擎會(huì)根據(jù)優(yōu)化階段生成的執(zhí)行計(jì)劃,依次執(zhí)行并給出結(jié)果。這些主要實(shí)現(xiàn)方式是通過(guò)調(diào)用存儲(chǔ)引擎的API實(shí)現(xiàn),這些API提供了強(qiáng)大的功能,通過(guò)疊加等操作實(shí)現(xiàn)查詢。

6、響應(yīng)給客戶端

無(wú)論是否有查詢結(jié)果,都會(huì)返回給客戶端,包括影響到行數(shù)、執(zhí)行時(shí)長(zhǎng)等等。

此時(shí)若查詢緩存打開(kāi),會(huì)將查詢結(jié)果存入緩存。

當(dāng)有查詢結(jié)果時(shí),返回的結(jié)果集是一個(gè)增量過(guò)程。mysql可能在生成的第一條結(jié)果時(shí)就會(huì)將結(jié)果返回給客戶端,客戶端不斷接收直至完畢。服務(wù)端無(wú)需存儲(chǔ)結(jié)果集占用內(nèi)存客戶端也可以第一時(shí)間接收到結(jié)果。

MySQL邏輯架構(gòu)入門(mén)介紹就先給大家講到這里,對(duì)于其它相關(guān)問(wèn)題大家想要了解的可以持續(xù)關(guān)注我們的行業(yè)資訊。我們的板塊內(nèi)容每天都會(huì)捕捉一些行業(yè)新聞及專業(yè)知識(shí)分享給大家的。

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI