1

我使用SQL Server 2008 R2。我創建了一個臨時表,並用1000行填充我的臨時表。由於預計行數不好,SQL Server使用嵌套循環

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條記錄。

我有一個INNER JOINItem和我的臨時表。

Select 
    * 
From 
    Inventory.Item 
Inner Join 
    #Temp On (#Temp.ID = item.MasterID And MRes = ExRestaurantID) 

正如你可以在下面三張圖片看,SQL服務器已經創建了一個執行計劃爲我的查詢,但在他的計劃中,估計,我Item表只有一個行的,因爲它使用了嵌套循環加入。

enter image description here

enter image description here

enter image description here

劑量人知道爲什麼SQL Server有預期的項目表只是一個行?

+1

它估計掃描將返回1000行1次,並估計搜索將返回1行1000次。兩個估計都是正確的。 – GSerg

回答

7

估算值完全正確。

有點混亂的嵌套循環內部加入行的估計數是每次執行但實際的行數跨的所有彙總執行。

它估計每執行1行和1,000執行,並且最終實際行數爲1,000。

那裏沒有差異。