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”

相关文章

SELECT a.*,b.dp_name,c.pa_name,fm_name=(CASE WHEN a.fm_n...
if not exists(select name from syscolumns where name=&am...
select a.*,pano=a.pa_no,b.pa_name,f.dp_name,e.fw_state_n...
要在 SQL Server 2019 中设置定时自动重启,可以使用 Window...
您收到的错误消息表明数据库 'EastRiver' 的...
首先我需要查询出需要使用SQL Server Profiler跟踪的数据库标...