Ren*_*eno 5 sql sql-server-2008
我有查询例子:
SELECT TOP 10
User.id,
User.Name,
Country.Country
FROM User
Inner Join Country
ON Country.Id = User.CountryId
where User.PlanId = 1
Run Code Online (Sandbox Code Playgroud)
在这种情况下,SQL管理器在执行计划中显示使用哈希匹配并且它非常快.
但是,如果我使用User.PlanId = 2 SQL管理器使用嵌套循环进行查询而且速度非常慢...为什么使用不同的搜索条件它会使用不同的算法?我该如何解决?
我猜测,a 为PlanID
2 的用户数量比 1 的用户数量要多得多。
这将解释执行计划和运行时的变化。AHASH MATCH
是最通用(通常效率最低)的连接。基本上,引擎会手动构建一个表来将所有值配对。
ANESTED LOOP
将左侧的每个值与右侧的每个值进行检查,当一个数据集比另一个数据集大很多并且两侧都建立了索引时,该方法效果很好。
HASH MATCH
不过,如果您的数据集非常小,A可能会很快。我怀疑速度差异是由于数据集大小不同造成的。您可以通过以下方式轻松检查:
SELECT PlanId, COUNT(*) as CT
FROM User
GROUP BY PlanID
Run Code Online (Sandbox Code Playgroud)
...这将为您提供分配。