2017-02-01 7 views
0

SSRSネイティブインスタンスでパフォーマンスのトラブルシューティングを行っています。私は単純な構文の問題であることを希望しています。私はLEFT OUTER JOINとNOT EXISTSを使用するときに実行計画をトラブルシューティングしています。私は2つの違いを知っているし、おそらく存在しないことが私の解決策であることを願っていますが、私には1つの問題があります。ここに私の質問です。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が、それは別名です取得するためにJOINを使用していることです。最後のクエリを使用するとき、私は "マルチパート識別子" 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) 

そこで問題は、どのように私はこれをフォーマットしますか?

+0

b.UserIDを除いて、あなたは参加する以外に選択肢はありません。 [FinancialData]。[dbo]。[FactSalesHistoryDe​​tail] a、FinancialData.dbo.DimSalesRepUserIDMap bは、結合の古い構文です。オリジナルのLEFT OUTER JOINを使用して、実行計画を使用して、テーブルにインデックスが必要かどうかを判断することをお勧めします。 SalesRepIDは両方のテーブルでインデックスを作成する必要があり、インデックスのインクルード部分にはステートメントのSELECT部分​​の列を含める必要があると思います。がんばろう! –

+0

LEFTの後にOUTERを指定することはオプションの構文です。 LEFTとLEFT OUTERは同じことを意味します。 – Ethilium

答えて

0

最後のクエリでは結果が得られますが、パフォーマンスには影響します。Btw、クロス結合を試しましたか?

+0

私は、このAjithの構文を私に見せてもらえませんか? –

関連する問題