【发布时间】:2012-01-17 15:02:09
【问题描述】:
我的一个存储过程执行时间过长。查看查询执行计划,我发现该操作花费的时间太长。它是一个嵌套循环物理运算符,具有外部表(65991 行)和内部表(19223 行)。在嵌套循环中,它显示估计行数 = 1,268,544,993(将 65991 乘以 19223),如下所示:
我阅读了几篇关于用于连接的物理运算符的文章,有点困惑嵌套循环或哈希匹配是否更适合这种情况。从我能收集到的:
哈希匹配 - 当没有有用的索引可用时由优化器使用,一个表比另一个小得多,表未按连接列排序。哈希匹配也可能表明可以使用更有效的连接方法(嵌套循环或合并连接)。
问题:在这种情况下,哈希匹配会比嵌套循环更好吗?
谢谢
【问题讨论】:
-
请发布查询。您始终可以使用查询提示来强制使用特定的连接类型和连接顺序,并比较两者的
SET STATISTICS IO ON;SET STATISTICS TIME ON;的输出(假设连接实际上是一个等连接,因此哈希连接甚至更合适?) -
您应该替换“Clustered Index Scan”来查找和显示您的脚本。
-
如果你有一天回到stackoverflow,如果你选择一个答案会很好。 :)
标签: sql-server-2008 tsql sql-execution-plan