【发布时间】:2015-06-29 23:35:48
【问题描述】:
我不清楚下面提到的查询之间的工作差异。
具体我不清楚
OPTION(LOOP JOIN)的概念。
第一种方法:这是使用的传统连接,比以下所有方法都最昂贵。
SELECT *
FROM [Item Detail] a
LEFT JOIN [Order Detail] b ON a.[ItemId] = b.[fkItemId] OPTION (FORCE ORDER);
第二种方法:它在带有排序数据的语句中包含OPTION,只是经过优化。
SELECT *
FROM [Item Detail] a
LEFT LOOP JOIN [Order Detail] b ON a.[ItemId] = b.[fkItemId] OPTION (FORCE ORDER);
第三种方法:在这里,我不清楚查询是如何工作的,包括OPTION 和loop join!!?
SELECT *
FROM [Item Detail] a
LEFT LOOP JOIN [Order Detail] b ON a.[ItemId] = b.[fkItemId] OPTION (LOOP JOIN);
谁能解释一下彼此之间的区别和工作方式以及优势?
注意:这些是不是嵌套的 OR Hash 循环!
【问题讨论】:
-
文档:Query Hints 和 Join Hints
-
为什么您认为第一种方法“比以下所有方法最昂贵”?
-
我用我的本地服务器对其进行了测试,并获得了最大的差异!当然,差异只是 +2 到 +3 秒
-
通过不指定任何提示,您可以让 SQL Server 确定使用哪种连接类型,这通常是最好的。有时,如果统计信息过时,可能会使用错误的计划。
标签: sql-server sql-server-2008 left-join join-hints