sql執(zhí)行器是什么意思(sql server執(zhí)行)

發(fā)布時(shí)間:2024-02-13
本文主要介紹sql executor(由sql server執(zhí)行)是什么意思,下面一起看看sql executor(由sql server執(zhí)行)是什么意思相關(guān)資訊。
本文的目的是對(duì)執(zhí)行計(jì)劃中每個(gè)操作的相關(guān)信息進(jìn)行分類。數(shù)據(jù)訪問(wèn)操作首先,訪問(wèn)數(shù)據(jù)最基本的操作。這可以通過(guò)直接訪問(wèn)表或訪問(wèn)索引來(lái)完成。表的數(shù)據(jù)結(jié)構(gòu)是堆,b樹(shù)聚集索引的數(shù)據(jù)是通過(guò)構(gòu)建聚集索引和非聚集索引數(shù)據(jù)的b樹(shù)來(lái)組織的,而表不在堆中,這是根據(jù)存儲(chǔ)量來(lái)組織的。一般來(lái)說(shuō),非聚集索引只包含具有一些列和篩選器索引的表,并且只包括一些行。除了數(shù)據(jù)組織,數(shù)據(jù)訪問(wèn)還可以分為掃描(搜索)和查找(搜索)兩種。掃描是掃描整個(gè)結(jié)構(gòu)中的所有數(shù)據(jù),而搜索只是查找整個(gè)結(jié)構(gòu)中的一部分?jǐn)?shù)據(jù),所以可以看出,因?yàn)槎咽腔靵y的,所以無(wú)法搜索(查找)棧上的操作。對(duì)比b樹(shù)的順序,可以在b樹(shù)中找到。當(dāng)訪問(wèn)堆組織表的數(shù)據(jù)時(shí),將執(zhí)行堆掃描,如圖1所示。圖一。表格掃描正如你所看到的,表格掃描圖標(biāo)清楚地顯示了表格掃描的性質(zhì),并在一個(gè)無(wú)序的組織表格中從頭到尾進(jìn)行掃描。至于聚集索引和非聚集索引的b樹(shù)結(jié)構(gòu),也可以進(jìn)行掃描。一般來(lái)說(shuō),為了獲得索引中的所有數(shù)據(jù),在一個(gè)表或索引中獲得的掃描數(shù)據(jù)樹(shù),大部分都會(huì)用聚簇索引進(jìn)行掃描,這比搜索花費(fèi)的代價(jià)要小。如圖2所示。圖二。聚集索引掃描索引掃描圖標(biāo)還可以清楚地顯示聚集索引掃描的性質(zhì)。在找到最左邊的葉節(jié)點(diǎn)后,掃描所有的葉節(jié)點(diǎn)以掃描整個(gè)結(jié)構(gòu)。當(dāng)然,同樣的概念也適用于非聚集索引,如圖3所示。圖3。非聚集索引的掃描使得b樹(shù)對(duì)于b樹(shù)結(jié)構(gòu)中的某些數(shù)據(jù)有意義。根據(jù)鍵值,可以從b樹(shù)根到單條路徑,減少掃描頁(yè)面的不必要消耗。圖4是查詢計(jì)劃中的索引查找。圖4。聚集索引查找索引查找圖標(biāo)也非常生動(dòng),可以看到從根節(jié)點(diǎn)到葉節(jié)點(diǎn)的線條。它可以在數(shù)據(jù)頁(yè)面上找到。不難看出,如果我們需要查找分散在不同頁(yè)面的多個(gè)數(shù)據(jù),那么搜索操作要重復(fù)很多次。當(dāng)這個(gè)數(shù)字足夠大的時(shí)候,sql server會(huì)選擇相對(duì)低消耗的索引掃描和不重復(fù)的索引搜索,這是同一個(gè)概念,但不再正確。書簽查找(bookmark lookup)您可能會(huì)想,如果非聚集索引可以快速查找數(shù)據(jù),但很遺憾,當(dāng)非聚集索引不包含所有必需的列時(shí),會(huì)發(fā)生什么情況呢?此時(shí),sql server將面臨兩種選擇:直接訪問(wèn)基礎(chǔ)表獲取數(shù)據(jù)或者非聚集索引查找數(shù)據(jù),然后轉(zhuǎn)到基礎(chǔ)表獲取數(shù)據(jù),不受非聚集索引的影響,選擇依賴于行和其他統(tǒng)計(jì)信息的查詢分析器的估計(jì)值。會(huì)選擇少消費(fèi)一個(gè)。圖5顯示了一個(gè)簡(jiǎn)單的書簽搜索。圖5。簡(jiǎn)單的書簽搜索從圖5可以看出,發(fā)現(xiàn)第一個(gè)非聚集索引就可以了,但是這個(gè)指標(biāo)并不包括所有的列,所以必須在這些附加的基本表中找到列,所以要找到鍵。如果把基本表的那堆整理好了,那么專注搜索(searching)就會(huì)擺脫搜索(rid searching),關(guān)鍵是擺脫查詢書簽搜索。但有時(shí)索引查找返回的行數(shù)太多,使得書簽查找的性能遠(yuǎn)低于直接掃描操作。因此,sql server將選擇掃描而不是書簽,如圖6所示。圖6。6.stateprovinceid列有一個(gè)非聚集索引,但是由于返回的行數(shù)太大,分析器選擇掃描而不是書簽搜索。這一估計(jì)是基于統(tǒng)計(jì)資料。關(guān)于統(tǒng)計(jì),我可以看到以前的一篇博文,講的是sql server中統(tǒng)計(jì)對(duì)查詢的影響。聚合操作(aggregation)聚合函數(shù)支持聚合操作。聚合函數(shù)是在一定條件下將一組數(shù)據(jù)匯總為1,或者根據(jù)規(guī)則聚合為多個(gè)數(shù)據(jù)的過(guò)程。有些聚合函數(shù),比如average、sum、minimum、different關(guān)鍵字,可能會(huì)導(dǎo)致兩種聚合操作:流聚合(stream aggregation)和哈希聚合(hash aggregation)。流聚合(stream aggregation)流聚合需要在聚合的數(shù)據(jù)集中有序地執(zhí)行聚合函數(shù)??梢酝ㄟ^(guò)命令對(duì)數(shù)據(jù)進(jìn)行排序,也可以從聚合中直接訪問(wèn)排序后的數(shù)據(jù)。在另一個(gè)非聚集索引中,有標(biāo)量聚合而沒(méi)有聚合操作組,該操作是執(zhí)行聚合流量。例如,我們直接進(jìn)行標(biāo)量聚合,如圖7所示。圖7。流量聚合,但是對(duì)于組的條款來(lái)說(shuō),因?yàn)閿?shù)據(jù)需要按照命令按組列排序,所以需要保證排序。注意,排序操作是一個(gè)操作,內(nèi)存保證。當(dāng)sql server占用內(nèi)存和tempdb時(shí),它總是在排序操作中選擇最低成本和哈希匹配。操作需要排序,如圖8所示。圖8。需要排序的流被聚集和排序。圖8按產(chǎn)品線進(jìn)行分類,然后根據(jù)它們各自的組對(duì)它們進(jìn)行聚合。hash aggregation上的流量聚合適用于數(shù)據(jù)量相對(duì)較小的情況,但對(duì)于相對(duì)較大的表,使用hash組比排序的開(kāi)銷要低。hash set在內(nèi)存中建立哈希表實(shí)現(xiàn)聚合,所以在內(nèi)存中沒(méi)有建立hash排序所需的數(shù)據(jù)。該表將列后面的組作為核心值,如圖9所示。圖9。hash聚合在內(nèi)存中一個(gè)好的哈希表中,下面的值作為鍵組,然后處理每個(gè)數(shù)據(jù)集。當(dāng)哈希表中不存在該鍵時(shí),向哈希表中添加一個(gè)條目,當(dāng)哈希表中已經(jīng)存在該鍵時(shí),根據(jù)規(guī)則(和avg等聚合函數(shù)是用于計(jì)算值的哈希表)(value)。連接(connection)當(dāng)多個(gè)表連接時(shí)(書簽搜索和索引連接計(jì)數(shù)),sql server會(huì)采用三種不同的連接循環(huán)嵌套連接(nested loop)環(huán)形連接)、合并連接(merge connection)和哈希連接(hash connection),這三種連接并不比其他連接更好,但每種連接都適應(yīng)特定的場(chǎng)景。循環(huán)嵌套連接(嵌套循環(huán)連接)在圖10中可以看到一個(gè)簡(jiǎn)單的循環(huán)嵌套連接。圖10。循環(huán)嵌套連接的一個(gè)例子循環(huán)嵌套連接的圖標(biāo)也很生動(dòng)。在外部輸入(external input)之上,這是索引掃描聚合。在下一個(gè)內(nèi)部輸入(internal input)中,這里是聚集索引查找。外部輸入只執(zhí)行一次,內(nèi)部輸入的每一行的連接條件都基于外部輸入。由于是290行,內(nèi)部輸入執(zhí)行290次。您可以通過(guò)屬性窗口看到它。如圖11:圖11內(nèi)部輸入執(zhí)行的次數(shù)。根據(jù)嵌套循環(huán)的原理,很容易看出,因?yàn)閽呙璧氖峭獠枯斎耄运阉鞯氖莾?nèi)部輸入。當(dāng)兩個(gè)連接的外部輸入結(jié)果集相對(duì)較小,而內(nèi)部輸入表查找量非常大時(shí),查詢優(yōu)化器傾向于選擇循環(huán)嵌套模式。合并連接(merge join)不同于循環(huán)嵌套,合并連接只是對(duì)每個(gè)表的一次訪問(wèn)。從這個(gè)角度來(lái)看,組合連接比循環(huán)嵌套要快得多。典型的合并連接如下,如圖12所示。圖12。組合連接的原理不難想象。首先,連接的組合需要雙方的順序。因?yàn)檩斎霔l件是有序的,每個(gè)輸入集取一行進(jìn)行比較,等退不等棄。從這里不難看出為什么合并聯(lián)接只允許聯(lián)接等于數(shù)字。我們可以從圖11中的圖標(biāo)看出這個(gè)原理。如果輸入數(shù)據(jù)的兩個(gè)方面失敗,查詢分析器將不會(huì)選擇合并連接。我們還可以索引提示符來(lái)強(qiáng)制合并連接。為了實(shí)現(xiàn)這個(gè)目標(biāo),執(zhí)行計(jì)劃必須添加一個(gè)排序步驟來(lái)實(shí)現(xiàn)訂單,如圖13所示。圖13。通過(guò)排序,合并連接哈希連接(hash connection)哈希連接只需要兩邊各1個(gè)數(shù)據(jù)。哈希連接是通過(guò)在內(nèi)存中建立哈希表來(lái)實(shí)現(xiàn)的。這是比較大的內(nèi)存消耗,內(nèi)存不夠的話會(huì)占用tempdb。但事實(shí)并非如此。;典型的散列連接不需要有序的組合。如圖14所示。圖14。散列連接在這里,我刪除客戶 sql server組合連接使用兩個(gè)以上的輸入來(lái)生成一個(gè)哈希表,該哈希表可由以下輸入檢測(cè)到,并可在屬性窗口中看到,如圖15所示。圖15。哈希鍵生成和哈希鍵檢測(cè)一般來(lái)說(shuō),當(dāng)兩個(gè)輸入數(shù)據(jù)很大,并且數(shù)據(jù)到達(dá)數(shù)據(jù)的一個(gè)或兩個(gè)方面時(shí),使用哈希匹配。多表連接時(shí)的并行性,sql server在多cpu或多核的情況下也允許查詢并行,無(wú)疑提高了效率。圖16顯示了一個(gè)并行示例。圖16。并行增強(qiáng)效率綜述簡(jiǎn)要介紹sql server執(zhí)行計(jì)劃中常見(jiàn)的操作原則,了解這些步驟和原則是優(yōu)化查詢的基礎(chǔ)工作。
了解更多sql executor(由sql server執(zhí)行)是什么意思相關(guān)內(nèi)容請(qǐng)關(guān)注本站點(diǎn)。
上一個(gè):電機(jī)馬達(dá)的未來(lái)發(fā)展趨勢(shì)在哪里?
下一個(gè):zolix拉曼光譜分析系統(tǒng)finder 930

安裝win7找不到cd dvd驅(qū)動(dòng)(u盤安裝win7提示缺少驅(qū)動(dòng))
哪些條件決定山茶花種植的好壞
RTT052492FTP現(xiàn)貨庫(kù)存,最新價(jià)格
TOC總有機(jī)碳監(jiān)測(cè)時(shí)常見(jiàn)問(wèn)題
唯一可以虐獅子的星座 獅子座的克星
photron高速攝像機(jī)miniux50
電腦上打口怎么打出來(lái)(口子符號(hào)電腦怎么打)
win10怎么看顯卡的詳細(xì)教程圖解(win10怎么看顯卡的詳細(xì)教程)
商場(chǎng)最終解釋權(quán)合法嗎
如何自已建站?自己建站有哪些優(yōu)勢(shì)?
十八禁 网站在线观看免费视频_2020av天堂网_一 级 黄 色 片免费网站_绝顶高潮合集Videos