【发布时间】:2013-06-14 14:16:29
【问题描述】:
我已经阅读了很多文章表明 join 比 SubQuery 更好。但是他们没有解释为什么!
你能解释一下为什么 join 比 SubQuery 更好吗?
【问题讨论】:
标签: sql sql-server sql-server-2008 sqlite tsql
我已经阅读了很多文章表明 join 比 SubQuery 更好。但是他们没有解释为什么!
你能解释一下为什么 join 比 SubQuery 更好吗?
【问题讨论】:
标签: sql sql-server sql-server-2008 sqlite tsql
情况并非总是如此。
在 SQL Server 中,使用 EXISTS/NOT EXISTS 通常可以胜过使用 JOIN 关键字编写的等效查询。 SQL server 有高效的半联接和反半联接运算符。
相关子查询的问题在于,当它们强制使用嵌套循环算法时,子查询会针对每个外部行重复单独评估。
【讨论】:
EXISTS 和 NOT EXISTS 子查询是(反)半连接,不是正确连接,它们通常会导致不同的计划 - 主要是因为结果可能不同。它们当然不是单独的查询。
Join 在查询中执行一次以获取数据的超集,然后应用过滤器(如果有)。
对每个匹配的记录执行多次子查询。
【讨论】:
人们常常忘记的一件事是优化器比大多数程序员更了解它。 我建议阅读这篇文章。 SQL server engine knows the best
subquery/join/exists/in 很可能被优化器以同样的方式执行。
【讨论】: