Sql server SQL Server使用嵌套循环,因为估计的行数不正确

Sql server SQL Server使用嵌套循环,因为估计的行数不正确,sql-server,sql-server-2008-r2,nested-loops,temp-tables,sql-execution-plan,Sql Server,Sql Server 2008 R2,Nested Loops,Temp Tables,Sql Execution Plan,我使用SQLServer2008R2。我创建了一个临时表,用1000行填充临时表 Create Table #Temp ( ID Int, res INT ) Insert Into #Temp VALUES (10004, 2246), (10005, 2246), (10006, 2246), (10007, 2246), (10008, 2246), (10009, 2246), (10010, 2246), (10011, 2246), (1001

我使用SQLServer2008R2。我创建了一个临时表,用1000行填充临时表

Create Table #Temp
(
  ID Int,
  res INT
)

Insert Into #Temp 
VALUES (10004, 2246), (10005, 2246), (10006, 2246), (10007, 2246),
       (10008, 2246), (10009, 2246), (10010, 2246), (10011, 2246),
       (10013, 2246), (10014, 2246), (10015, 2246), (10016, 2246),
       (10017, 2246), (10018, 2246), (10019, 2246), (10020, 2246),
       (10021, 2246), ................ 
我有另一个名为
Item
的表。它有大约30000条记录

我在
项目
和我的临时表之间有一个
内部联接

Select 
    * 
From 
    Inventory.Item 
Inner Join
    #Temp On (#Temp.ID = item.MasterID And MRes = ExRestaurantID)
正如您在下面的三幅图中所看到的,SQL Server为我的查询创建了一个执行计划,但在他的计划中,它估计我的
Item
表只有一行,因此它使用了嵌套循环联接


有人知道为什么SQLServer只希望项表有一行吗

估计完全正确

令人困惑的是,在嵌套循环联接内部,估计的行数是每次执行的行数,但实际行数是在所有执行中聚合的

它估计每次执行1行和1000次执行,最终的实际行数为1000行


没有差异。

估计完全正确

令人困惑的是,在嵌套循环联接内部,估计的行数是每次执行的行数,但实际行数是在所有执行中聚合的

它估计每次执行1行和1000次执行,最终的实际行数为1000行


没有差异。

它估计扫描将返回1000行1次,搜索将返回1行1000次。这两个估计都是正确的。它估计扫描将返回1000行1次,它估计搜索将返回1行1000次。两个估计都是正确的。