【问题标题】:Why join is better than subquery? [closed]为什么联接比子查询好? [关闭]
【发布时间】:2013-06-14 14:16:29
【问题描述】:

我已经阅读了很多文章表明 join 比 SubQuery 更好。但是他们没有解释为什么!

你能解释一下为什么 join 比 SubQuery 更好吗?

【问题讨论】:

    标签: sql sql-server sql-server-2008 sqlite tsql


    【解决方案1】:

    情况并非总是如此。

    在 SQL Server 中,使用 EXISTS/NOT EXISTS 通常可以胜过使用 JOIN 关键字编写的等效查询。 SQL server 有高效的半联接和反半联接运算符。

    相关子查询的问题在于,当它们强制使用嵌套循环算法时,子查询会针对每个外部行重复单独评估。

    【讨论】:

    • 存在/不存在的问题是它仍然是一个单独的查询,优化器可能仍然根据查询在水下执行连接。当然存在在许多其他情况下是最优的。
    • @NLwino EXISTSNOT EXISTS 子查询是(反)半连接,不是正确连接,它们通常会导致不同的计划 - 主要是因为结果可能不同。它们当然不是单独的查询。
    【解决方案2】:

    Join 在查询中执行一次以获取数据的超集,然后应用过滤器(如果有)。

    对每个匹配的记录执行多次子查询。

    【讨论】:

      【解决方案3】:

      人们常常忘记的一件事是优化器比大多数程序员更了解它。 我建议阅读这篇文章。 SQL server engine knows the best

      subquery/join/exists/in 很可能被优化器以同样的方式执行。

      【讨论】:

        猜你喜欢
        • 2019-12-22
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-03-15
        相关资源
        最近更新 更多