【问题标题】:Which is more correct with SQL Functions, Join or in Where clause?SQL 函数、Join 或 Where 子句哪个更正确?
【发布时间】:2015-10-08 02:41:36
【问题描述】:

我知道周围有类似的问题(例如SQL Filter criteria in join criteria or where clause which is more efficient),但我记得SQL 函数很特别。也许?那么基本上哪个更正确/更高效?

SELECT *
  FROM  [DBOne].[dbo].[SomeData] SD
    INNER JOIN [DBTwo].[DBOne].[SomeOtherData_GetALL]() SOD ON SD.[DataID] = SOD.[DataID]

SELECT *
  FROM  [DBOne].[dbo].[SomeData] SD
  WHERE SD.[DataID] IN (SELECT [DataID] FROM [DBTwo].[DBOne].[SomeOtherData_GetALL]())

【问题讨论】:

  • 您的 2 个查询不等价。你在比较苹果和橘子。
  • 就您的特定代码示例而言 - 不,表函数没有什么特别或不同。
  • 怎么样?我猜不是Left JoinInner Join...
  • 即使您从left join 更改为inner join,它们仍然可能返回不同的结果。
  • 这取决于您的表结构和索引。如果索引不正确,WHERE EXISTS 将比它们中的任何一个都快,并且如果它们正确,它们的性能将相同。在我看来,它更明确。

标签: sql sql-server function


【解决方案1】:

我通常使用 WHERE EXISTS 而不是加入。请参阅here 了解说明。

【讨论】:

    【解决方案2】:

    基本上就像问JOIN vs SUB QUERY,如果你关心性能,我建议使用JOIN而不是使用WHERE IN子句,你可以看到性能的差异使用 SQL 的执行计划。

    为了进一步了解,可以阅读这篇文章:Join vs. sub-query

    希望对您有所帮助。

    【讨论】:

    • 如果这是真的,那么你会得到复选标记......但似乎人们说没关系......你确定吗?
    • 实际上使用SUB QUERY 是最简单的方法,但是就像我所说的,如果您关心的是性能本身,我很确定最好使用JOIN 基于我的有 SQL 方面的经验。如果要测试可以使用SQL的执行计划进行检查。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-12
    相关资源
    最近更新 更多