【问题标题】:What is faster, JOIN AND or WHERE?什么更快,JOIN AND 还是 WHERE?
【发布时间】:2014-10-01 01:51:53
【问题描述】:

这两个哪个更快?有区别还是可以互换?

使用 WHERE 子句加入:

delete PersonInfo from PersonInfo pi 
  join Person p on pi.PersonId = p.Id where p.Name = 'Smith'

使用 AND 加入:

delete PersonInfo from PersonInfo pi 
  join Person p on pi.PersonId = p.Id and p.Name = 'Smith'

使用 SQL Server 2012。

【问题讨论】:

标签: sql


【解决方案1】:

由于默认情况下连接是内部的,因此这些查询之间没有逻辑差异。

任何称职的查询优化器都会为这两个查询生成相同的执行计划。这是我看到的两种情况的执行计划:

(您看到的计划会有所不同,因为我创建的示例表没有索引,而您的表很可能有合适的索引)。

如果连接是外部的,那么两个查询之间会有所不同:第二个查询将删除 PersonInfo 中在 Person 表中没有对应行的所有行,此外还会删除所有查询的信息'Smith's.

【讨论】:

    【解决方案2】:

    我认为更快的方法是......

    DELETE FROM PersonInfo
    WHERE EXISTS (SELECT 1 
                  FROM Person 
                  WHERE PersonInfo.PersonId = Person.Id 
                  AND Person.Name = 'Smith')
    

    【讨论】:

      猜你喜欢
      • 2010-12-21
      • 1970-01-01
      • 2011-06-28
      • 2023-01-30
      • 1970-01-01
      • 1970-01-01
      • 2011-06-11
      • 1970-01-01
      • 2012-10-28
      相关资源
      最近更新 更多