2017-07-29 12 views
0

SQLサーバーにexists節のハッシュマッチを使用させようとしています。EXISTS句のSQL Serverクエリのヒント

Execution Plan

FROM 
    [Dbo].[360 Nrc Data] AS [nrc] 
WHERE 
    [CALENDAR_DATE] BETWEEN @START_DATE AND @End_Date 
    AND EXISTS (SELECT 1 
       FROM [staging].[FACT_DTV_RETENTION_EVENT_STEP_1] AS [fact] 
       WHERE [fact].[CD_PORTFOLIO_ID] = [nrc].[Cd_Portfolio_Id] 
        AND [fact].[Event_Date] = [nrc].[CALENDAR_DATE]) 
GROUP BY 
    [Calendar_Date], [Cd_Portfolio_Id]) 

クエリヒントを強制する通常の方法は以下の通りであるが、左半参加は

[_fact_date_and_portfolio] AS [fact]  
    inner hash join  

    [dbo].[360 TA Offer] AS [offr] 
+0

なぜハッシュマッチングを強制しますか?おそらく、適切なインデックスが速いでしょう。 –

+0

> 10Mに参加すると、強制的にSQL Serverが行の推定値を間違って取得することが多くなります。 –

答えて

1

物理的な結合タイプを指定するヒント構文はありませんが参加しているよりも効率的です特定のセミジョイントまたはアンチセミジョイント演算子の場合

しかし、このプランには1つの結合しかないので、クエリの末尾にOPTION (HASH JOIN)を追加することができます。ヒントはすべての結合に適用されますが、他の結合はありません。