当前位置: 首页 > 面试题库 >

Transact-SQL-子查询还是左联接?

曾新
2023-03-14
问题内容

我有两个包含“任务”和“注释”的表,并且想要检索一个任务列表,以及每个任务的关联注释数。这两个查询可以完成任务:

select t.TaskId,
       (select count(n.TaskNoteId) from TaskNote n where n.TaskId = t.TaskId) 'Notes'
from   Task t

-- or
select t.TaskId,
       count(n.TaskNoteId) 'Notes'
from   Task t
left join
       TaskNote n
on     t.TaskId = n.TaskId
group by t.TaskId

它们之间有区别吗?我应该在一个之上使用另一个,还是它们只是完成同一工作的两种方式?谢谢。


问题答案:

在小型数据集上,当涉及到性能时,它们会被淘汰。索引时,LOJ会好一些。

我发现在大型数据集上,内部联接(内部联接也将起作用。)将在很大的因素(抱歉,没有数字)方面优于子查询。



 类似资料:
  • 问题内容: 我有以下两个查询: 查询执行计划统计信息:( 相对于批次的查询成本) 查询1(子查询):56% 查询#2(加入):44% 我认为子查询是最佳的,因为子查询将在应用WHERE筛选器后执行。统计数据表明,Query#2-JOIN方法更好。 请建议。另外,作为SQL Server中级用户,我如何得出哪个查询更好(如果有帮助的话,除执行计划外,其他都可以) 谢谢你。 问题答案: 连接比子查询快

  • 我需要从中选择所有行,如果选择位置子句匹配,则从中选择匹配这是我的外部与子查询,但它失败了。有人可以帮忙吗?

  • 问题内容: 我知道我们可以进行相关的子查询并加入。但是哪一个更快?有黄金法则还是我必须同时衡量这两者? 问题答案: 首先,相关子查询实际上是联接的一种。关于哪一个产生最佳执行计划没有黄金法则。如果您对性能感兴趣,则需要尝试不同的表格以查看最有效的方法。或者,至少,看看执行该决定的执行计划。 通常,出于两个原因,我倾向于避免关联子查询。首先,几乎总是可以在没有相关性的情况下编写它们。其次,许多查询引

  • 问题内容: 我有一个在SQL中完美运行的查询,但是我有最糟糕的时间将其转换为linq。该表(下面的表1)保存了多种记录类型的状态更改。联接需要设置两个字段以创建有效联接:SubmissionId(状态所属的表的pk)和SubmissionTypeId(确定状态所属的表)。 我已经尝试过使用x.DefaultIfEmpty()中的y到x进行多次迭代,并且无法在正确的位置设置where子句。我需要从T

  • 我尝试在pyspark中(在Spark 1.5.0上)运行以下SQL查询:

  • 问题内容: 对于开发人员何时使用联接而不是子查询是否有经验法则还是相同的? 问题答案: 取决于RDBMS。您应该比较两个查询的执行计划。 根据我对Oracle 10和11的经验,执行计划始终是相同的。