我有一个表可以根据某些条件链接到其他几个表。请考虑以下 SQL:
DECLARE @someFlag nvarchar(1) = 'B'
select COUNT(SL_A.ID) + COUNT(SL_B.ID) + COUNT(SL_C.ID) as TotalLinks
from Customers C
left outer join SomeLookupA SL_A on
@someFlag = 'A'
AND C.SomeLookupAId = SL_A.ID
left outer join SomeLookupB SL_B on
@someFlag = 'B'
AND C.SomeLookupBId = SL_B.ID
left outer join SomeLookupC SL_C on
@someFlag = 'C'
AND C.SomeLookupCId = SL_C.ID
如您所见,由于@someFlag 设置为“B”,因此由于@someFlag = '<?>'
每个连接的条件,只有第二个左外连接将返回结果。
现在显然我可以将这个 SQL 分成 3 个单独的语句,这些语句将在一个条件块中运行:
if (@someFlag = 'A')
begin
select COUNT(SL_A.ID) as TotalLinks
from Customers C
left outer join SomeLookupA SL_A on
@someFlag = 'A'
AND C.SomeLookupAId = SL_A.ID
end
else if (@someFlag = 'B')
... etc.... etc...
我个人更喜欢第一种方法,因为它更简洁。
我的问题是,SQL Server 引擎会优化多余的左连接吗?第一种方法的性能是否与第二种方法一样好?