sql – 带有exists子句的JOIN或Correlated子查询,哪一个更好

前端之家收集整理的这篇文章主要介绍了sql – 带有exists子句的JOIN或Correlated子查询,哪一个更好前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
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

两个查询都给出相同的输出,这在性能明智的连接或与exists子句的相关子查询中是好的,哪一个更好.

编辑: – 有连接的alternet方式,以提高性能: –
在上面的2个查询中,我想要来自dept以及contactinformation表的信息

解决方法

通常,EXISTS子句因为您可能需要DISTINCT来为JOIN提供预期输出.例如,如果ContactInformation行有多个Department行.

在上面的示例中,SELECT *:

>也意味着不同的输出,所以它们实际上并不等同
>使用索引的可能性更小,因为您将所有列拉出来

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

猜你在找的MsSQL相关文章