国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 數據庫 > SQL Server > 正文

SQL Server 執行計劃分析

2024-08-31 00:55:58
字體:
來源:轉載
供稿:網友
SQL Server 執行計劃分析

當一個查詢到達數據庫引擎時,SQL Server執行兩個主要的步驟來產生期望的查詢結果:

  第一步:查詢編譯,生成查詢計劃。

  第二步:執行這個查詢計劃。

1. 用于演示分析執行計劃的查詢語句

/*查詢返回所有來自London且發生過5個以上訂單的所有消費者的ID和訂單數*/USE NorthwindGOSELECT C.CustomerID,COUNT(O.OrderID) AS NumOrders FROM Customers CLEFT OUTER JOIN dbo.Orders O ON C.CustomerID = O.CustomerIDWHERE C.City = 'London'GROUP BY C.CustomerIDHAVING COUNT(O.OrderID) > 5ORDER BY NumOrders

2. 圖形化的查詢計劃,如下圖:

3. 上圖中的箭頭,表示數據流。箭頭的粗細,表示傳遞數據行數的多少。鼠標放到1所在位置的線上時,可以看到對應的詳細信息。

4. 查詢引擎先對Customers表執行Index Seek(把鼠標放到Index Seek圖表上,可以看到如下提示窗口),找到第一個來自London的Customer,并且把該行數據傳遞到Nested Loops運算符。

5.數據傳遞到Nested Loops運算符以后,激活運算符的內側運算(Compute Scalar,Stream Aggregate,Index Seek).首先執行Index Seek。根據Nested Loops的外部輸入對應的CustomerID,查詢到對應的Order.

6.上一步Index Seek查詢的結果,傳遞給Stream Aggregate運算符。在執行Stream Aggregate運算中定義了表達式[ExPR1009]=Count(*),進行數據統計。

【Stream Aggregate 運算符按一列或多列對行分組,然后計算查詢返回的一個或多個聚合表達式。此運算符的輸出可供查詢中的后續運算符引用和/或返回到客戶端。Stream Aggregate 運算符要求輸入在組中按列進行排序。如果由于前面的 Sort 運算符或已排序的索引查找或掃描導致數據尚未排序,優化器將在此運算符前面使用一個Sort 運算符。在 SHOWPLAN_ALL 語句或 SQL Server Management Studio 的圖形執行計劃中,GROUP BY 謂詞中的列會列在 Argument 列中,而聚合表達式列在 Defined Values 列中。】【摘自:technet】

7.Stream Aggregate 運算符的統計結果,傳遞給Cumpute Scalar運算符,在執行Cumpute Scalar中定義了表達式[Expr1004]=CONVERT_IMPLICIT(int,[Expr1009],0);

Cumpute Scalar運算符把統計結果[Expr1004]保存到從Nested Loops外部輸入的那行數據中。

8.新組成的這行數據,被傳送到Cumpute Scalar運算符(Nested Loops左側的),在這一步的過程中Expr1004表達式被重新賦值[Expr1004]=CASE WHEN [Expr1004] IS NULL THEN (0) ELSE [Expr1004] END;重新被賦值的表達式[Expr1004]被傳遞給Filter運算符。

9.Filter運算符接收到數據以后,執行了WHERE:([Expr1004]>(5))的條件判斷;如果條件判斷為真,則把結果傳遞給Sort運算符。

10.Sort運算符接收到數據以后,并不會馬上把數據傳遞到下一步。而是重復4-10的步驟;當所有的行到達Sort運算符后,執行Sort運算符操作,向下一步傳遞按正確順序的行數據。

【示例數據庫腳本】http://files.cnblogs.com/ucos/Northwind.zip


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 汾阳市| 汉沽区| 卓资县| 德昌县| 潜山县| 汉寿县| 锡林郭勒盟| 镶黄旗| 临沧市| 连州市| 玉门市| 临颍县| 昌邑市| 马山县| 珠海市| 韶关市| 桓台县| 龙南县| 宁波市| 石河子市| 奎屯市| 麻城市| 大石桥市| 财经| 河津市| 封开县| 伊通| 康乐县| 蒙自县| 沙湾县| 富民县| 灵武市| 加查县| 湟中县| 常宁市| 鄂托克前旗| 讷河市| 莎车县| 柏乡县| 三门县| 会理县|