【问题标题】:When should I use an INNER -LOOP- JOIN instead of an INNER JOIN什么时候应该使用 INNER -LOOP- JOIN 而不是 INNER JOIN
【发布时间】:2011-09-25 14:56:18
【问题描述】:

今天我在 SQL Server 中了解到一个叫做 INNER LOOP JOIN 的东西。

这是什么意思? (谷歌没有帮助......或者我应该说......关于它的博客文章有点......技术性并且让我大吃一惊)。

此外,在哪些常见情况下使用INNER LOOP JOIN 而非标准INNER JOIN 是个好主意?

【问题讨论】:

    标签: sql-server sql-server-2008 inner-join join-hints


    【解决方案1】:

    循环 |哈希 | MERGE 是联接提示,指定查询中的联接应使用循环、散列或合并。使用循环 |HASH | MERGE JOIN 强制两个表之间的特定连接。 LOOP 不能与 RIGHT 或 FULL 一起指定为连接类型。

    您应该始终使用 INNER JOIN。让查询优化器决定是否要执行 LOOP、MERGE 或 HASH 连接。在几乎所有情况下,优化器都会做出更好的判断。将使用哪一个以及何时可以从我的演示文稿http://sqlbits.com/Sessions/Event4/Understanding_Graphical_Execution_Plans 中找到。

    【讨论】:

    • quote “让查询优化器决定(原文如此)” .. 这(基本上)是如何决定的?通过统计?
    • 不同的连接类型针对不同的查询语义进行了优化,是的,这些大多基于统计/基数,还有其他因素,例如连接的一侧是否比另一侧大得多,是否对连接每一侧的输入进行排序等。我和其他人一样......如果关于这个的博客文章让你大吃一惊,你最好让优化器决定,直到你掌握了两者之间的差异连接的类型感觉你比优化器更聪明。
    • @pure.Krone 。你是对的 。尽管我不知道确切的算法,但我知道它是带下划线的表和索引的统计功能,为带下划线的对象创建文件组的方式,服务器的核心数(MAXDOP)和许多其他因素。如果你想深入挖掘,我建议你阅读 Connor Cunningham 的博客,他是 MS SQL Core 的首席架构师。
    【解决方案2】:

    您指的是join hint。与其他提示一样,连接提示只能作为最后的手段指定,因为大多数情况下 SQL 服务器会选择正确的算法。一篇很好的文章来解释其中一些是this

    【讨论】:

      猜你喜欢
      • 2010-11-11
      • 2021-06-25
      • 1970-01-01
      • 2020-01-09
      • 2010-12-03
      • 1970-01-01
      • 2015-03-03
      • 2013-04-10
      相关资源
      最近更新 更多