MySQL中SQL語句執(zhí)行流程是怎么樣的-創(chuàng)新互聯(lián)

這篇文章主要介紹MySQL中SQL語句執(zhí)行流程是怎么樣的,文中介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們一定要看完!

成都創(chuàng)新互聯(lián)公司于2013年成立,先為龍亭等服務(wù)建站,龍亭等地企業(yè),進(jìn)行企業(yè)商務(wù)咨詢服務(wù)。為龍亭企業(yè)網(wǎng)站制作PC+手機(jī)+微官網(wǎng)三網(wǎng)同步一站式服務(wù)解決您的所有建站問題。

總的來說,MySQL邏輯架構(gòu)可以分為server層和存儲引擎層這兩個(gè)部分。這篇文章記錄的是SQL語句執(zhí)行流程,主要是發(fā)生在server層上面的事。

server層主要包括了MySQL數(shù)據(jù)庫大多數(shù)的功能,畢竟執(zhí)行SQL大部分是在這一層去實(shí)現(xiàn)的嘛^_^。這一層細(xì)分下來可以分為:查詢緩存(query cache 有的簡稱QC),解析器也可叫分析器,預(yù)處理器(其實(shí)也可以歸在分析器里面),查詢優(yōu)化器等。

存儲引擎層主要的工作是存儲、提取數(shù)據(jù)。當(dāng)前主要的存儲引擎種類有:InnoDB,MyISAM,tokuDB等,他們的區(qū)別如下:

MySQL中SQL語句執(zhí)行流程是怎么樣的

在InnoDB和MyISAM這兩種存儲引擎中,當(dāng)前使用較廣的是InnoDB,MyISAM由于不支持事務(wù),不支持行鎖等原因在8.0版本后已經(jīng)被徹底廢棄了。從MySQL5.5版本開始,InnoDB成為MySQL數(shù)據(jù)庫默認(rèn)的存儲引擎。

先說結(jié)論吧,一條SQL語句從客戶端發(fā)起后,到MySQL數(shù)據(jù)庫,先會進(jìn)行一系列驗(yàn)證(比如查詢/更新權(quán)限),接著到查詢緩存,再到解析器,查詢優(yōu)化器,完成執(zhí)行語句的操作從存儲引擎中調(diào)取結(jié)果返回給客戶端。

一、連接&&驗(yàn)證權(quán)限

MySQL的連接主要有兩種方式,一種是從服務(wù)器本地發(fā)起的,通過root用戶,使用socket登錄,還有一種是我們從客戶端發(fā)起的屬于遠(yuǎn)程連接,一般來說遠(yuǎn)程連接數(shù)據(jù)庫通常需要輸入的幾個(gè)要素:用戶名、密碼、端口號、IP地址。

連接首先驗(yàn)證的是密碼是否正確,當(dāng)前用戶在當(dāng)前IP是否有權(quán)限登錄等,登錄完成后,該登錄用戶會具有當(dāng)前已分配給他的權(quán)限(增刪改查等)。

二、查詢緩存

上一步的驗(yàn)證完成后,SQL執(zhí)行就會來到查詢緩存(query cache),看是否有執(zhí)行過該SQL語句緩存有該SQL執(zhí)行結(jié)果,如果有,直接取出結(jié)果返回給客戶端,如果沒有則進(jìn)行下一步的查詢。

不可否認(rèn),如果每次都能在查詢緩存中獲取數(shù)據(jù),這個(gè)效率是很高的。但是對于實(shí)際應(yīng)用中,并不建議使用查詢緩存。因?yàn)椴樵兙彺嬷荒茚槍o態(tài)數(shù)據(jù)不能針對動(dòng)態(tài)數(shù)據(jù),很可能好不容易緩存好的數(shù)據(jù),其中有表發(fā)生了更新,一下子緩存好的數(shù)據(jù)就被清掉了。而在8.0版本后,這功能也被徹底廢棄了,在8.0之前的版本一般是建議關(guān)閉查詢緩存功能的。

三、解析器

在第二步的查詢緩存中沒能獲取或者說沒能命中查詢緩存,就會首先進(jìn)行SQL解析,包含語法,語義解析:是要進(jìn)行查詢還是更新操作,語句寫的有沒問題之類的,生成一個(gè)解析樹,提交給下一步。

四、預(yù)處理器(其實(shí)也可以歸在解析器里面)

將第三步中解析過的解析樹進(jìn)行預(yù)處理,相對于第三部來說會進(jìn)行更深層次的判斷,比如表/列是否存在之類的,會把解析樹處理為更為平衡的平衡樹結(jié)構(gòu)。

五、查詢優(yōu)化器

預(yù)處理完成后,來到查詢優(yōu)化器,這里決定了比如走哪個(gè)索引等,轉(zhuǎn)化前面的平衡樹為執(zhí)行計(jì)劃,并選出一個(gè)數(shù)據(jù)庫認(rèn)為是最優(yōu)的執(zhí)行計(jì)劃進(jìn)行SQL的執(zhí)行。

六、SQL執(zhí)行

從存儲引擎層調(diào)取需要的數(shù)據(jù),返回給客戶端,至此,流程結(jié)束。

以上是“MySQL中SQL語句執(zhí)行流程是怎么樣的”這篇文章的所有內(nèi)容,感謝各位的閱讀!希望分享的內(nèi)容對大家有幫助,更多相關(guān)知識,歡迎關(guān)注創(chuàng)新互聯(lián)-成都網(wǎng)站建設(shè)公司行業(yè)資訊頻道!

文章標(biāo)題:MySQL中SQL語句執(zhí)行流程是怎么樣的-創(chuàng)新互聯(lián)
網(wǎng)址分享:http://www.muchs.cn/article6/hgcog.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供做網(wǎng)站、建站公司、企業(yè)建站、服務(wù)器托管商城網(wǎng)站、虛擬主機(jī)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

外貿(mào)網(wǎng)站制作