2015-07-21 70 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次键查找 - 这就是嵌套循环的作用,它从第一个数据集中获取行,并为每个行调用第二个循环。 –