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

或相关子查询存在的子句有关,后者更好

罗韬
2023-03-14
问题内容
select * 
from ContactInformation c 
where exists (select * from Department d where d.Id = c.DepartmentId )

select * 
from ContactInformation c 
inner join Department d on c.DepartmentId = d.Id  

这两个查询都给出相同的输出,这在性能上明智的联接或带有existing子句的相关子查询中比较好,哪个更好。

编辑:-是否有供联接使用的alternet方式,以提高性能:-在上述2个查询中,我需要来自部门以及联系信息表的信息


问题答案:

通常,使用EXISTS子句是因为您可能需要DISTINCT进行JOIN才能提供预期的输出。例如,如果一行有多个Department行ContactInformation。

在上面的示例中,SELECT *:

  • 也意味着不同的输出,因此它们实际上不是等效的
  • 使用索引的机会较少,因为您正在拉出所有列

这样说,即使列列表有限,他们也会给出相同的计划:直到您需要DISTINCT …这就是为什么我说“ EXISTS”



 类似资料:
  • 本文向大家介绍SQL语句中‘相关子查询’与‘非相关子查询’有什么区别?相关面试题,主要包含被问及SQL语句中‘相关子查询’与‘非相关子查询’有什么区别?时的应答技巧和注意事项,需要的朋友参考一下 (1)非相关子查询是独立于外部查询的子查询,子查询总共执行一次,执行完毕后将值传递给外部查询。 (2)相关子查询的执行依赖于外部查询的数据,外部查询执行一行,子查询就执行一次。 因此非相关子查询比相关子查

  • 问题内容: 我很好奇为何应该比更快地执行。 当比尔·卡尔文提出一个要点时,我正在回答一个问题。当您使用它时,它使用相关子查询(依赖子查询),而IN()仅使用子查询。 解释显示,并且两者都使用了一个依赖子查询,并且都只使用了一个子查询..所以我很好奇关联子查询如何比子查询更快? 我以前使用过EXISTS,它的执行速度比IN快,这就是我感到困惑的原因。 这是带有说明的SQLFIDDLE 一些问题 在上

  • 问题内容: 即使它有性能问题,我是否也可以知道相关子查询的用途? 问题答案: 好吧,首先它没有性能问题。就是这样,鉴于硬件和数据库结构的性能限制,它将尽可能地执行。 至于它的作用,它只是表达特定逻辑条件的一种方式。

  • 问题内容: 我有两个表:表A和表B 表A和表B都有列。 表A和表B都有列。 表A的一列也称为。 检查条件: 如果表A“键” =恒定,则从表A检索RowId。 从中获取这些行ID,并检查这些行的字段是否>具有相同rowId的表B的> ModifiedAT字段。 Table没有重复的RowId,而Table具有。 我自己尝试的方法: 注意:另外,令我感到惊讶的是,如果我将硬编码值替换为“ 1”,它会起

  • 问题内容: 如何使用Criteria编写以下SQL: 问题答案: 要使用NHibernate,产生如下查询: 我们必须选择: 将子选择映射为实体。 创建原始SQL查询 第一种选择是创建一些,并将其映射为一个实体。如果我们不喜欢视图(或无法创建视图),则可以使用NHibernate映射元素element的功能 : 第二种选择是关于使用NHibernate API创建本机/原始SQL: 它没有从映射中

  • 问题内容: 我有一个一般性的问题,我将尝试通过一个例子来解释。 假设我有一个包含以下字段的表格:“ id”,“ name”,“ category”,“ appearances”和“ ratio” 我的想法是,我有几个项目,每个项目都与一个类别相关,并且多次“出现”。比率字段应包括类别中项目出现的总数中每个项目出现的百分比。 用伪代码,我需要以下内容: 对于每个类别, 找到与该 类别 相关的项目的总