天天躁日日躁狠狠躁AV麻豆-天天躁人人躁人人躁狂躁-天天澡夜夜澡人人澡-天天影视香色欲综合网-国产成人女人在线视频观看-国产成人女人视频在线观看

TSQL::(2.1)物理查詢數(shù)據(jù)流

當(dāng)一個查詢到達數(shù)據(jù)庫引擎時,SQL Server執(zhí)行兩個主要的步驟來產(chǎn)生結(jié)果。第一步是查詢編譯,他生成查詢計劃;第二部執(zhí)行這個查詢計劃。

查詢編譯由三個步驟組成:分析、代數(shù)化及查詢優(yōu)化。然后編譯器把經(jīng)過優(yōu)化的查詢計劃保存到過程緩存中。然后執(zhí)行引擎把該計劃轉(zhuǎn)換為可執(zhí)行的形式,然后執(zhí)行其中的步驟以生成查詢結(jié)果。如果今后再執(zhí)行相同的查詢或存儲過程時,過程緩存已經(jīng)包含了該計劃,則跳過編譯步驟,直接重用緩存的計劃來執(zhí)行該查詢或存儲過程。

 

安裝Northwind數(shù)據(jù)庫,點選“包括實際的執(zhí)行計劃”并執(zhí)行以下查詢:

 

USE Northwind;

GO

SELECT C.CustomerID, COUNT(O.OrderID) AS NumOrders

FROM dbo.Customers AS C

 LEFT OUTER JOIN dbo.Orders AS O

    ON C.CustomerID = O.CustomerID

WHERE C.City = 'London'

GROUP BY C.CustomerID

HAVING COUNT(O.OrderID) > 5

ORDER BY NumOrders;

 

生成結(jié)果:

 

執(zhí)行計劃流程圖:

未標(biāo)題-1副本.png

 

文本形式的執(zhí)行計劃輸出:

 |--Sort(ORDER BY:([Expr1004] ASC))

       |--Filter(WHERE:([Expr1004]>(5)))

            |--Compute Scalar(DEFINE:([Expr1004]=CASE WHEN [Expr1004] IS NULL THEN (0) ELSE [Expr1004] END))

                 |--Nested Loops(Left Outer Join, OUTER REFERENCES:([C].[CustomerID]))

                      |--Index Seek(OBJECT:([Northwind].[dbo].[Customers].[City] AS [C]), SEEK:([C].[City]=N'London') ORDERED FORWARD)

                      |--Compute Scalar(DEFINE:([Expr1004]=CONVERT_IMPLICIT(int,[Expr1009],0)))

                           |--Stream Aggregate(DEFINE:([Expr1009]=Count(*)))

                                |--Index Seek(OBJECT:([Northwind].[dbo].[Orders].[CustomersOrders] AS [O]), SEEK:([O].[CustomerID]=[Northwind].[dbo].[Customers].[CustomerID] as [C].[CustomerID]) ORDERED FORWARD)

 

計劃中的分支是交叉執(zhí)行的。該示例中SQL Server交替執(zhí)行嵌套循環(huán)的兩個分支。

灰色箭頭表示數(shù)據(jù)流,箭頭的粗細(xì)表示查詢優(yōu)化器估計通過該連接傳遞的行數(shù)。

引擎先對Customers表執(zhí)行索引查找,他將選擇來自London的第一個消費者。可以查看此部操作的詳細(xì)信息,如下圖。

未標(biāo)題-2.png

可以看到此步的查找謂詞的前綴為:

[Northwind].[dbo].[Customers].[City] = N'London

 

被選擇的行被傳遞到嵌套循環(huán)運算符,嵌套循環(huán)則會開始進行內(nèi)層循環(huán)的運算。內(nèi)層循環(huán)由計算標(biāo)量、流聚合、索引查找組成。

 

查看一下內(nèi)層循環(huán)的第一步,索引查找的詳細(xì)信息,如下圖:

未標(biāo)題-2.png

查找謂詞的前綴為:

[Northwind].[dbo].[Orders].CustomerId =

 ([Northwind].[dbo].[Customers].CustomerID as [C].CustomerID)

我們看到C.CustomerID的值被用于查找Orders表以獲得該CustomerID的所有訂單。也就是說嵌套循環(huán)的內(nèi)側(cè)引用了從外側(cè)得到的值。

 

緊接著,查詢會在找到來自London的第一個消費者的所有訂單之后,將這些訂單傳遞給流聚合運算符進行統(tǒng)計。從文本形式的執(zhí)行計劃輸出上可以很好的理解流聚合在這里做了什么。

|--Stream Aggregate(DEFINE:([Expr1009]=Count(*)))

其實他就是數(shù)了一下,有多少個訂單。

 

然后是計算標(biāo)量的操作:

|--Compute Scalar(DEFINE:([Expr1004]=CONVERT_IMPLICIT(int,[Expr1009],0)))

其實就是做了一下類型轉(zhuǎn)換。

 

然后,內(nèi)側(cè)操作的結(jié)果會保存到外側(cè)的那行中,說白了就是把London的第一個消費者的訂單數(shù)量存在這個消費者對象之中。

 

那么是不是當(dāng)所有的嵌套循環(huán)執(zhí)行完成后,形成了一個由(消費者,該消費者的訂單個數(shù))這樣的結(jié)構(gòu)所組成的數(shù)組呢?答案是否定的,因為計劃中的分支是交叉執(zhí)行的。當(dāng)一個消費者完成了數(shù)數(shù)的工作,也完成他自己在前4步的操作,進入左上角的計算標(biāo)量運算符中。

 

那么然后,由左上角的計算標(biāo)量來處理這個數(shù)據(jù),這個步驟就是做了一下值的檢查:

|--Compute Scalar(DEFINE:([Expr1004]=CASE WHEN [Expr1004] IS NULL THEN (0) ELSE [Expr1004] END))

這里的[Expr1004]在之前已經(jīng)定義過,還記得吧,首先是求某一個消費者的所有訂單數(shù),然后把值做了類型轉(zhuǎn)換。這里又增加了一些判斷:如果[Expr1004]NULL則返回0,否則則執(zhí)行之前的[Expr1004]

 

接著,將結(jié)果傳遞給篩選器運算符。

未標(biāo)題-2.png

文本形式的執(zhí)行計劃輸出:

|--Filter(WHERE:([Expr1004]>(5)))

這里很好理解,就是對這條數(shù)據(jù)進行謂詞操作,如果值不為真,則移除掉該數(shù)據(jù)。

 

終于,數(shù)據(jù)到達了排序運算符。大家應(yīng)該可以想到,在所有要被排序的行全部就緒之前進行排序是沒有意義的,因此這些行會在排序這一步進行等待,也就是說如果對Customers表的索引查找操作又找到一個來自London的消費者,將重復(fù)執(zhí)行上述過程,直到所有要返回的行到達了排序運算符后,將按正確的順序返回這些行。

未標(biāo)題-2.png

文本形式的執(zhí)行計劃輸出:

|--Sort(ORDER BY:([Expr1004] ASC))

it知識庫TSQL::(2.1)物理查詢數(shù)據(jù)流,轉(zhuǎn)載需保留來源!

鄭重聲明:本文版權(quán)歸原作者所有,轉(zhuǎn)載文章僅為傳播更多信息之目的,如作者信息標(biāo)記有誤,請第一時間聯(lián)系我們修改或刪除,多謝。

主站蜘蛛池模板: WWW国产精品内射老师 | 曰本熟妇乱妇色A片在线 | 亚洲精品有码在线观看 | 日本免费一本天堂在线 | 久久久久国产精品美女毛片 | a在线视频免费观看 | 天天日免费观看视频一1 | 拍床戏被肉高H纯肉H在水 | 国产欧美第一页 | 永久久久免费人妻精品 | 女人会操出水图 | 午夜免费体验30分 | 男人边吃奶边摸边做刺激情话 | 性奴公司 警花 | 狠狠操天天操夜夜操 | 亚洲伊人成综合人影院 | 牛和人交videos欧美 | 青青青伊人 | 免费夜里18款禁用软粉色 | 日本久久和电影 | 久久精品视频15人人爱在线直播 | 国产盗摄一区二区 | 久久本道久久综合伊人 | 在线观看国产人视频免费中国 | 国产精品女上位在线观看 | 久久99精品国产麻豆婷婷 | 色婷婷综合久久久久中文一区二区 | 青柠在线观看免费高清电视剧荣耀 | 免费一级毛片在线观看 | 日日噜噜噜夜夜爽爽狠狠图片 | 色欲AV精品人妻一区二区麻豆 | 伊人久久精品中文字幕 | 99久久国产综合精品网成人影院 | 欧美人妖12p | 韩国三级久久精品 | 小骚妇BBBXXX| 99久久久久国产精品免费 | 超碰97人人做人人爱少妇 | 精品久久香蕉国产线看观看麻豆 | 久久视频精品38线视频在线观看 | 人人舔人人爱 |