2015-07-21 35 views
0

以下是針對以下查詢的簡單執行計劃。瞭解執行計劃中的執行次數

查詢:

SELECT TOP (25) orderid, custid, empid, shipperid, orderdate, filler 
FROM dbo.Orders 
ORDER BY orderid; 

執行計劃: enter image description here

我的問題是如何使執行數感

下面是執行的所有操作員的數量

嵌套循環:
估計被處決的人數:1

索引掃描:1
實際執行的次數

估計被處決的人數:1 實際執行的次數:1

查詢關鍵字: 預計執行數:25 實際執行數量:25

我的問題是 1.爲什麼是隻表示1執行計數

2.Index掃描也顯示出只有一個執行計數嵌套循環,但它在人們得到25行execution.are這些行存儲在緩存行集或一些緩存?.Will嵌套循環取一排從緩存中,然後調用鍵查找25次,每行

下面是從伊茨克奔甘

的解釋。例如,如何索引掃描迭代知道停止在25行之後,如果頂部迭代器告訴它停止在計劃的後面出現?答案是內部API調用從根節點(在我們的例子中是SELECT迭代器)開始。此根節點調用Top迭代器。 Top迭代器調用一個方法25次,它要求嵌套循環迭代器中的一行。接下來,嵌套循環迭代器會調用25次要求索引掃描迭代器中的一行的方法。因此,索引掃描迭代器不會超出它掃描的第25行。總之,雖然它通常是更直觀的跟蹤數據流量爲了解釋該計劃

但爲什麼執行計數將只顯示1,請讓我知道,如果我錯過任何thing.Attached是執行計劃

更新(一月2017):

我曾問堆棧一些什麼類似的問題overflow..please看到這個答案對同一詳情..

https://dba.stackexchange.com/questions/134172/set-statistics-i-o-for-nested-loops

回答

1
  1. 嵌套循環只執行一次。它有25個關鍵的查找,但這不是計算嵌套循環操作本身執行的次數。

  2. 25行來自索引查找,它將它們傳遞給用於獲取行的缺失數據的鍵查找,然後將該行傳遞給頂級運算符。頂級操作員獲得25行時,告訴其他人停止。我沒有真正理解緩存問題。當然,數據會被提取到緩衝池中,但一旦運行成功,它就會從一個運算符傳遞到下一個運算符。

+0

它做25鍵查找,但這不是計數多少次嵌套循環操作本身正在執行---請你詳細說明這一點..到第二點,我指的是行集緩存 – TheGameiswar

+0

@TheGameiswar它是一個嵌套循環,它執行25次鍵查找 - 這就是嵌套循環的作用,它從第一個數據集中獲取行,併爲每個行調用第二個循環。 –