真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

mysql怎么生成解析樹(shù) mysql樹(shù)形結(jié)構(gòu)sql查詢

select語(yǔ)句執(zhí)行的結(jié)果是什么

品牌型號(hào):華為MateBook D15

榆陽(yáng)ssl適用于網(wǎng)站、小程序/APP、API接口等需要進(jìn)行數(shù)據(jù)傳輸應(yīng)用場(chǎng)景,ssl證書(shū)未來(lái)市場(chǎng)廣闊!成為創(chuàng)新互聯(lián)的ssl證書(shū)銷(xiāo)售渠道,可以享受市場(chǎng)價(jià)格4-6折優(yōu)惠!如果有意向歡迎電話聯(lián)系或者加微信:18982081108(備注:SSL證書(shū)合作)期待與您的合作!

系統(tǒng):Windows 11

select語(yǔ)句執(zhí)行的結(jié)果是表。select語(yǔ)句目的,就是從數(shù)據(jù)庫(kù)檢索,統(tǒng)計(jì),輸出數(shù)據(jù)。select 語(yǔ)句的執(zhí)行過(guò)程,根據(jù)查詢的內(nèi)容數(shù)據(jù),組成一個(gè)結(jié)果集,然后用表的形式返回。所以執(zhí)行結(jié)果是一張表。

select語(yǔ)句的執(zhí)行流程:

1、通過(guò)客戶端/服務(wù)器通信協(xié)議與MySQL建立連接。

2、查詢緩存,這是 MySQL的一個(gè)可優(yōu)化查詢的地方,如果開(kāi)啟了Query Cache且在查詢緩存過(guò)程中查詢到完全相同的SQL語(yǔ)句,則將查詢結(jié)果直接返回給客戶端;如果沒(méi)有開(kāi)啟Query Cache或者沒(méi)有查詢到完全相同的SQL語(yǔ)句則會(huì)由解析器進(jìn)行語(yǔ)法語(yǔ)義解析,并生成解析樹(shù)。

3、預(yù)處理器生成新的解析樹(shù)。

4、查詢優(yōu)化器生成執(zhí)行計(jì)劃。

5、查詢執(zhí)行引擎執(zhí)行SQL語(yǔ)句,此時(shí)查詢執(zhí)行引擎會(huì)根據(jù)SQL語(yǔ)句中表的存儲(chǔ)引擎類(lèi)型,以及對(duì)應(yīng)的API接口與底層存儲(chǔ)引擎緩存或者物理文件的交互情況,得到查詢結(jié)果,由MySQL Server過(guò)濾后將查詢結(jié)果緩存并返回給客戶端。若開(kāi)啟了Query Cache,這時(shí)也會(huì)將SQL語(yǔ)句和結(jié)果完整地保存到Query Cache中,以后若有相同的SQL語(yǔ)句執(zhí)行則直接返回結(jié)果。

Mysql基礎(chǔ)知識(shí)點(diǎn)《一》

查詢緩存中的好嗎?是不是要開(kāi)啟查詢緩存呢?其實(shí)不建議開(kāi)啟查詢緩存,原因是緩存失效非常頻繁,只要表更新了,緩存就會(huì)失效。所以對(duì)于那些更新操作多的表來(lái)說(shuō)簡(jiǎn)直是災(zāi)難,除非是靜態(tài)表,所以在mysql8中已經(jīng)將查詢緩存取消了。

這是因?yàn)閟ql操作涉及的表不一定只有sql語(yǔ)句中的那些,要在執(zhí)行器階段才能確認(rèn)。

如果表 T 中沒(méi)有字段 k,而你執(zhí)行了這個(gè)語(yǔ)句 select * from T

where k=1, 那肯定是會(huì)報(bào)“不存在這個(gè)列”的錯(cuò)誤: “Unknown column ‘k’ in

‘where clause’”。你覺(jué)得這個(gè)錯(cuò)誤是在我們上面提到的哪個(gè)階段報(bào)出來(lái)的呢?

答 :分析器階段,在分析器階段解析器會(huì)解析sql語(yǔ)句生成一顆解析樹(shù),判斷表時(shí)候存在,列字段是否存在等。

MySql查詢過(guò)程 幾點(diǎn)記要

查詢緩存:

只有當(dāng)查詢的語(yǔ)句完全一致(通過(guò)哈希查詢實(shí)現(xiàn),大小區(qū)分)才會(huì)命中,命中后直接檢查用戶權(quán)限,之后直接返回?cái)?shù)據(jù)給客戶端

查詢優(yōu)化處理:

語(yǔ)法解析和預(yù)處理:根據(jù)SQL生成語(yǔ)法解析樹(shù),并解析語(yǔ)法錯(cuò)誤,預(yù)處理器檢查解析樹(shù)是否存在數(shù)據(jù)上的錯(cuò)誤

查詢優(yōu)化器:選擇最好的執(zhí)行計(jì)劃,包括對(duì)語(yǔ)句的優(yōu)化,對(duì)關(guān)聯(lián)順序的優(yōu)化,使用索引等

查詢執(zhí)行引擎:

相較查詢處理優(yōu)化階段,執(zhí)行引擎階段僅是將執(zhí)行計(jì)劃利用存儲(chǔ)引擎提供的接口執(zhí)行,并不復(fù)雜!

mysql 存儲(chǔ)過(guò)程執(zhí)行太慢怎么優(yōu)化

1.當(dāng)我們請(qǐng)求mysql服務(wù)器的時(shí)候,MySQL前端會(huì)有一個(gè)監(jiān)聽(tīng),請(qǐng)求到了之后,服務(wù)器得到相關(guān)的SQL語(yǔ)句,執(zhí)行之前(虛線部分為執(zhí)行),還會(huì)做權(quán)限的判斷

2.通過(guò)權(quán)限之后,SQL就到MySQL內(nèi)部,他會(huì)在查詢緩存中,看該SQL有沒(méi)有執(zhí)行過(guò),如果有查詢過(guò),則把緩存結(jié)果返回,說(shuō)明在MySQL內(nèi)部,也有一個(gè)查詢緩存.但是這個(gè)查詢緩存,默認(rèn)是不開(kāi)啟的,這個(gè)查詢緩存,和我們的Hibernate,Mybatis的查詢緩存是一樣的,因?yàn)椴樵兙彺嬉骃QL和參數(shù)都要一樣,所以這個(gè)命中率是非常低的(沒(méi)什么卵用的意思)。

3.如果我們沒(méi)有開(kāi)啟查詢緩存,或者緩存中沒(méi)有找到對(duì)應(yīng)的結(jié)果,那么就到了解析器,解析器主要對(duì)SQL語(yǔ)法進(jìn)行解析

4.解析結(jié)束后就變成一顆解析樹(shù),這個(gè)解析樹(shù)其實(shí)在Hibernate里面也是有的,大家回憶一下,在以前做過(guò)Hibernate項(xiàng)目的時(shí)候,是不是有個(gè)一個(gè)antlr.jar。這個(gè)就是專(zhuān)門(mén)做語(yǔ)法解析的工具.因?yàn)樵贖ibernate里面有HQL,它就是通過(guò)這個(gè)工具轉(zhuǎn)換成SQL的,我們編程語(yǔ)言之所以有很多規(guī)范、語(yǔ)法,其實(shí)就是為了便于這個(gè)解析器解析,這個(gè)學(xué)過(guò)編譯原理的應(yīng)該知道.

5.得到解析樹(shù)之后,不能馬上執(zhí)行,這還需要對(duì)這棵樹(shù)進(jìn)行預(yù)處理,也就是說(shuō),這棵樹(shù),我沒(méi)有經(jīng)過(guò)任何優(yōu)化的樹(shù),預(yù)處理器會(huì)這這棵樹(shù)進(jìn)行一些預(yù)處理,比如常量放在什么地方,如果有計(jì)算的東西,把計(jì)算的結(jié)果算出來(lái)等等...

6.預(yù)處理完畢之后,此時(shí)得到一棵比較規(guī)范的樹(shù),這棵樹(shù)就是要拿去馬上做執(zhí)行的樹(shù),比起之前的那棵樹(shù),這棵得到了一些優(yōu)化

7.查詢優(yōu)化器,是MySQL里面最關(guān)鍵的東西,我們寫(xiě)任何一條SQL,比如SELECT * FROM USER WHERE USERNAME = toby AND PASSWORD = 1,它會(huì)怎么去執(zhí)行?它是先執(zhí)行username = toby還是password = 1?每一條SQL的執(zhí)行順序查詢優(yōu)化器就是根據(jù)MySQL對(duì)數(shù)據(jù)統(tǒng)計(jì)表的一些信息,比如索引,比如表一共有多少數(shù)據(jù),MySQL都是有緩存起來(lái)的,在真正執(zhí)行SQL之前,他會(huì)根據(jù)自己的這些數(shù)據(jù),進(jìn)行一個(gè)綜合的判定,判斷這一次在多種執(zhí)行方式里面,到底選哪一種執(zhí)行方式,可能運(yùn)行的最快.這一步是MySQL性能中,最關(guān)鍵的核心點(diǎn),也是我們的優(yōu)化原則.我們平時(shí)所講的優(yōu)化SQL,其實(shí)說(shuō)白了,就是想讓查詢優(yōu)化器,按照我們的想法,幫我們選擇最優(yōu)的執(zhí)行方案,因?yàn)槲覀儽萂ySQL更懂我們的數(shù)據(jù).MySQL看數(shù)據(jù),僅僅只是自己收集到的信息,這些信息可能是不準(zhǔn)確的,MySQL根據(jù)這些信息選了一個(gè)它自認(rèn)為最優(yōu)的方案,但是這個(gè)方案可能和我們想象的不一樣.

8.這里的查詢執(zhí)行計(jì)劃,也就是MySQL查詢中的執(zhí)行計(jì)劃,比如要先執(zhí)行username = toby還是password = 1

9.這個(gè)執(zhí)行計(jì)劃會(huì)傳給查詢執(zhí)行引擎,執(zhí)行引擎選擇存儲(chǔ)引擎來(lái)執(zhí)行這一份傳過(guò)來(lái)的計(jì)劃,到磁盤(pán)中的文件中去查詢,這個(gè)時(shí)候重點(diǎn)來(lái)了,影響這個(gè)查詢性能最根本的原因是什么?就是硬盤(pán)的機(jī)械運(yùn)動(dòng),也就是我們平時(shí)熟悉的IO,所以一條查詢語(yǔ)句是快還是慢,就是根據(jù)這個(gè)時(shí)間的IO來(lái)確定的.那怎么執(zhí)行IO又是什么來(lái)確定的?就是傳過(guò)來(lái)的這一份執(zhí)行計(jì)劃.(優(yōu)化就是制定一個(gè)我們認(rèn)為最快的執(zhí)行方案,最節(jié)省IO,和執(zhí)行最快)

10.如果開(kāi)了查詢緩存,則返回結(jié)果給客戶端,并且查詢緩存也放一份。


分享標(biāo)題:mysql怎么生成解析樹(shù) mysql樹(shù)形結(jié)構(gòu)sql查詢
瀏覽路徑:http://weahome.cn/article/doojshg.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部