微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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”

原文地址:https://www.jb51.cc/mssql/75070.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐