이 NO JOIN PREDICATE 경고로 경고해야합니까?


20

성능이 좋지 않은 저장 프로 시저의 비트와 조각 문제를 해결하고 있습니다. 이 절차 섹션에 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'

보기 ( [ls])가 원격 서버 (계획 오른쪽의 원격 쿼리 % 41)를 호출합니다.

계획의 이미지는 다음과 같습니다.

계획

이 블로그 게시물로 인해이 질문 만하고 나중에 다시 물지 않도록하려고합니다.

답변:


24

우리는 것을 알고 있기 때문에 l.id = '732820'그리고 ls.id = l.id다음 SQL 서버 도출을 그ls.id = '732820'

FROM   db2.dbo.VIEW ls
       JOIN db1.dbo.table l
         ON ls.id = l.id
WHERE  l.id = '732820' 

와 같다

  ( /*...*/ FROM   db2.dbo.VIEW ls WHERE id = '732820'  )
   CROSS JOIN 
  ( /*...*/  FROM   db1.dbo.table l WHERE id = '732820'  )

이 재 작성은 성능이 나쁘지 않습니다 .

이 파생은 좋은 것입니다. SQL Server가 행을 필터링 할 수 있습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.