Estou solucionando os pedaços de um procedimento armazenado com baixo desempenho. Esta seção do procedimento está lançando um aviso NO JOIN PREDICATE
select
method =
case methoddescription
when 'blah' then 'Ethylene Oxide'
when NULL then 'N/A'
else methoddescription
end,
testmethod =
case methoddescription
when 'blah' then 'Biological Indicators'
when NULL then 'N/A'
else 'Dosimeter Reports'
end,
result =
case when l.res is null or l.res <> 1 then 'Failed'
else 'Passed'
end,
datecomplete = COALESCE(CONVERT(varchar(10), NULL, 101),'N/A')
from db2.dbo.view ls
join db1.dbo.table l
on ls.id = l.id
where item = '19003'
and l.id = '732820'
A exibição ( [ls]
) chama um servidor remoto (a consulta remota %41 à direita do plano).
Aqui está uma imagem do plano:
Eu só faço essa pergunta por causa desta postagem no blog e quero ter certeza de que isso não voltará a me incomodar mais tarde.
Porque sabemos disso
l.id = '732820'
els.id = l.id
o SQL Server deriva issols.id = '732820'
ou seja
é o mesmo que
Esta reescrita não é ruim para o desempenho .