溫馨提示×

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

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

一條查詢(xún)SQL查詢(xún)語(yǔ)句的執(zhí)行原理是什么

發(fā)布時(shí)間:2021-12-03 16:36:08 來(lái)源:億速云 閱讀:145 作者:柒染 欄目:大數(shù)據(jù)

本篇文章為大家展示了一條查詢(xún)SQL查詢(xún)語(yǔ)句的執(zhí)行原理是什么,內(nèi)容簡(jiǎn)明扼要并且容易理解,絕對(duì)能使你眼前一亮,通過(guò)這篇文章的詳細(xì)介紹希望你能有所收獲。

先熟悉一下淺而易懂SQL執(zhí)行的流程圖SQL查詢(xún)過(guò)程七步曲

一條查詢(xún)SQL查詢(xún)語(yǔ)句的執(zhí)行原理是什么

1.查詢(xún)SQL發(fā)送請(qǐng)求

客戶(hù)端將查詢(xún)sql按照mysql通信協(xié)議傳輸?shù)椒?wù)端。服務(wù)端接受到請(qǐng)求后,服務(wù)端單起一個(gè)線(xiàn)程執(zhí)行sql    
2.判斷是否為select查詢(xún)語(yǔ)句    
執(zhí)行前mysql會(huì)通過(guò)命令分發(fā)器判斷其是否是一條select語(yǔ)句(判斷sql語(yǔ)句前6個(gè)字符是否為select);  
3.查詢(xún)緩存先行    
MySQL在開(kāi)啟查詢(xún)緩存的情況下,首先會(huì)先在查詢(xún)緩存中查找該SQL是否完全匹配,如果完全匹配,驗(yàn)證當(dāng)前用戶(hù)是否具備查詢(xún)權(quán)限,如果權(quán)限驗(yàn)證通過(guò),直接返回結(jié)果集給客戶(hù)端,該查詢(xún)也就完成了。如果不匹配繼續(xù)向下執(zhí)行。  
4.語(yǔ)法分析之分析器      
如果在查詢(xún)緩存中未匹配成功,則將語(yǔ)句交給分析器作語(yǔ)法分析。MySQL通過(guò)分析語(yǔ)法知道要查的內(nèi)容。這步會(huì)對(duì)語(yǔ)法進(jìn)行檢驗(yàn),如果語(yǔ)法不對(duì)就會(huì)返回語(yǔ)法錯(cuò)誤中斷查詢(xún)。如果語(yǔ)法不正確
You have an error in your SQL syntax
5.查詢(xún)之預(yù)處理器      

(1)分析器的工作完成后,將語(yǔ)句傳遞給預(yù)處理器,檢查數(shù)據(jù)表和數(shù)據(jù)列是否存在,解析別名看是否存在歧義如果錯(cuò)誤返回  
 Unknown column xxx in ‘where clause’

(2)sql是否有該表的的操作權(quán)限;如果錯(cuò)誤

ERROR 1142 (42000): SELECT command denied to user 'root'@'localhost' for table 'xxx'
6.查詢(xún)之優(yōu)化器    
語(yǔ)句解析完成后,MySQL就知道要查的內(nèi)容了,之后會(huì)將語(yǔ)句傳遞給優(yōu)化器進(jìn)行優(yōu)化(通過(guò)索引選擇最快的查找方式),并生成執(zhí)行計(jì)劃。
7.查詢(xún)之執(zhí)行器    
最后,交給執(zhí)行器去具體執(zhí)行該查詢(xún)語(yǔ)句。執(zhí)行器開(kāi)始執(zhí)行后,會(huì)逐漸將數(shù)據(jù)保存到結(jié)果集中,同時(shí)會(huì)逐步將數(shù)據(jù)緩存到查詢(xún)緩存中,最終將結(jié)果集返回給客戶(hù)端。

上述內(nèi)容就是一條查詢(xún)SQL查詢(xún)語(yǔ)句的執(zhí)行原理是什么,你們學(xué)到知識(shí)或技能了嗎?如果還想學(xué)到更多技能或者豐富自己的知識(shí)儲(chǔ)備,歡迎關(guān)注億速云行業(yè)資訊頻道。

向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)容。

sql
AI