내 SSRS 기본 인스턴스에서 성능 문제를 해결하고 있습니다. 나는 간단한 구문 문제가 있기를 바랍니다. LEFT OUTER JOIN과 NOT EXISTS를 사용할 때 실행 계획을 문제 해결할 것입니다. 나는 두 사람의 차이점을 안다. 아마도 존재하지 않는다는 희망이 나의 해결책이지만, 나는 한 가지 문제가있다. 여기 내 쿼리입니다. LEFT OUTER JOIN 대 NOT EXISTS 구문에 여러 테이블 사용
SELECT [Facility]
,[CategoryDesc]
,[SubCategoryDesc]
,[ItemKey]
,[ItemDesc]
,[HeadCount]
,[Group]
,[Group Name]
,[CustomerKey]
,[Customer]
,[InvoiceNo]
,[InvoiceDate]
,[OrderNo]
,[OrderDate]
,[FiscalYear]
,[Quarter]
,[WeekNo]
,[SalesmanID]
,[Salesman]
,[ReasonCodeKey]
,[Weight]
,[Box]
,[Value]
,[OrderStatus]
,[PONumber]
,[SubCategoryKey]
,[DispatchCenterOrderKey]
,[PromotionFlag]
,[CategoryKey]
,b.UserID
FROM [FinancialData].[dbo].[FactSalesHistoryDetail] a
LEFT OUTER JOIN [FinancialData].[dbo].[DimSalesRepUserIDMap] b on b.SalesRepID = a.SalesmanID
내가 대신 이것을 사용 바라고 :
SELECT [Facility]
,[CategoryDesc]
,[SubCategoryDesc]
,[ItemKey]
,[ItemDesc]
,[HeadCount]
,[Group]
,[Group Name]
,[CustomerKey]
,[Customer]
,[InvoiceNo]
,[InvoiceDate]
,[OrderNo]
,[OrderDate]
,[FiscalYear]
,[Quarter]
,[WeekNo]
,[SalesmanID]
,[Salesman]
,[ReasonCodeKey]
,[Weight]
,[Box]
,[Value]
,[OrderStatus]
,[PONumber]
,[SubCategoryKey]
,[DispatchCenterOrderKey]
,[PromotionFlag]
,[CategoryKey]
,b.UserID
FROM [FinancialData].[dbo].[FactSalesHistoryDetail] a
WHERE NOT EXISTS (SELECT 1 FROM FinancialData.dbo.DimSalesRepUserIDMap b WHERE b.SalesRepID = a.SalesmanID)
문제는 매우 마지막 열 "b.UserID"는 LEFT OUTER 그것이 별칭이다 얻기 위해 가입 사용한다는 것입니다. 마지막 쿼리를 사용하면 "다중 부분 식별자"b.UserID "가 바인딩 될 수 없습니다. 분명히이 테이블에 대한 호출을 제거했기 때문에 분명합니다. 이렇게 포함하면 ... 멀리까지 걸립니다. 너무 오래 내가받을 기대하고 있지 것을. NOT이 존재하거나 존재합니다 다른 테이블에서 여러 열을 참조하는 동안 나는, 성능을 최적화하고 있도록
이FROM [FinancialData].[dbo].[FactSalesHistoryDetail] a, FinancialData.dbo.DimSalesRepUserIDMap b
WHERE NOT EXISTS (SELECT 1 FROM FinancialData.dbo.DimSalesRepUserIDMap b WHERE b.SalesRepID = a.SalesmanID)
그래서 질문은 어떻게이를 포맷합니까입니까?
i가 필요한 경우 nclude b.UserID 그러면 조인을 할 수 밖에 없습니다. 심지어 [FinancialData]. [dbo]. [FactSalesHistoryDetail] a, FinancialData.dbo.DimSalesRepUserIDMap b는 이전의 조인 구문입니다. 원래 LEFT OUTER JOIN을 사용하고 실행 계획을 사용하여 테이블에 인덱스가 필요한지 판별하십시오. SalesRepID는 두 테이블에서 모두 인덱싱되어야하며 인덱스의 포함 부분에는 문 부분의 SELECT 부분에 열이 포함되어야한다고 생각합니다. 행운을 빕니다! –
LEFT 뒤에 OUTER를 지정하는 것은 선택적 구문입니다. LEFT와 LEFT OUTER는 같은 의미입니다. – Ethilium