2017-07-29 46 views
0

我想强制SQL服务器使用存在子句的散列匹配如下。对于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

没有暗示语法来指定物理连接类型用于特定的半连接或反半连接运算符。

但是,由于此计划只有一个加入,您可以将OPTION (HASH JOIN)添加到查询的末尾。该提示适用于所有联接,但没有其他联接。