다음 쿼리에서 테이블 title_deed
에 대한 조인은 title_deed_no
검색 조건에만 필요하며 필드를 선택하지 않습니다. @titleDeedNumber
매개 변수가 null 인 경우 여전히 조인이 수행됩니까? 어쨌든 성능 차이는 어느 정도입니까? 큰 못생긴 T-SQL 문자열의 동적 생성을 대체하려고 시도하고 있으며 그 코드는 title_deed_no
값이 제공된 경우에만 조인을 추가합니다.필요없는 경우 SQL Server 2008에서 조인을 최적화합니까?
DECLARE @registrarId nchar(1)
DECLARE @titleDeedNumber nvarchar(50)
SELECT TOP 100
vw.*
FROM ACC.dbo.vw_Property_Nad vw
INNER JOIN title_deed td ON (@titleDeedNumber IS NULL)
OR (td.Prop_ID = vw.prop_id)
WHERE vw.Prop_ID IS NOT NULL
AND Registrar = isnull(@registrarId, vw.Registrar)
AND td.title_deed_no = isnull(@titleDeedNumber, td.title_deed_no)
나는 실행 계획을 examning 시도,하지만 vw_Property_Nad
보기에서 조인에 너무 바쁘다, 나는 오히려 어쨌든 전문가의 의견을 얻을 것입니다.
참여를 제거 할 때 성능에 미치는 영향은 처음부터 참여하는 전체 비용의 양에 따라 다릅니다. 'INNER JOIN' 대신에 'LEFT OUTER JOIN'을하고'WHERE '대신에 ON 절에'title_deed_no' 체크를 포함시켜야하는 이유는 무엇입니까? 계획이 너무 바쁜 경우 간단한보기 또는 표로 유사한 시나리오를 재구성하지 않는 이유는 무엇입니까? –
(@titleDeedNumber가 NULL 일 때와 같이) 조인 조건이 없다면 CROSS JOIN과 같지 않습니까? – Magnus