SQL 服务器使用嵌套循环,因为估计的行数不正确
SQL Server uses Nested Loops because of bad estimated number of rows
我使用 SQL Server 2008 R2。我创建了一个临时文件 table 并用 1000 行填充了我的临时文件 table。
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
的 table。它有大约30000条记录。
我在 Item
和我的温度 table 之间有一个 INNER JOIN
。
Select
*
From
Inventory.Item
Inner Join
#Temp On (#Temp.ID = item.MasterID And MRes = ExRestaurantID)
正如您在下面的三张图片中看到的,SQL 服务器已经为我的查询创建了一个执行计划,但在他的计划中,它估计我的 Item
table 刚刚一行,因此它使用了嵌套循环连接。
有谁知道为什么 SQL 服务器只要求项目 table 一行?
估计完全正确。
在嵌套循环连接的内部有点令人困惑,估计的行数是 每次执行,但实际行数是在 all 处决。
它估计每次执行 1 行和 1,000 次执行,最终实际行数为 1,000。
那里没有差异。
我使用 SQL Server 2008 R2。我创建了一个临时文件 table 并用 1000 行填充了我的临时文件 table。
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
的 table。它有大约30000条记录。
我在 Item
和我的温度 table 之间有一个 INNER JOIN
。
Select
*
From
Inventory.Item
Inner Join
#Temp On (#Temp.ID = item.MasterID And MRes = ExRestaurantID)
正如您在下面的三张图片中看到的,SQL 服务器已经为我的查询创建了一个执行计划,但在他的计划中,它估计我的 Item
table 刚刚一行,因此它使用了嵌套循环连接。
有谁知道为什么 SQL 服务器只要求项目 table 一行?
估计完全正确。
在嵌套循环连接的内部有点令人困惑,估计的行数是 每次执行,但实际行数是在 all 处决。
它估计每次执行 1 行和 1,000 次执行,最终实际行数为 1,000。
那里没有差异。