小编mil*_*dba的帖子

SQL Server OR 运算符导致大量循环连接

下面的查询非常慢(运行超过一分钟),我已将问题缩小到OR操作员 ( ...OR (EXISTS (SELECT...)。

我使用实时执行来验证 OR 语句的表之间是否存在嵌套循环连接,然后将记录连接回EmailTable执行计划中的 。

基本上,EmailTable正在被探查两次。

如果我添加提示OPTION (MERGE JOIN),查询将在一秒钟内完成。

请告诉我如何重写此查询,以便优化器默认选择更好的计划。

EmailTable并且TeamMembers在 上有聚集索引INS_ID。表上的统计数据经常更新。

DECLARE @a INT
    ,@b BIT
    ,@c INT
    ,@d INT
    ,@e INT;

SELECT [XYZ].[CNT] AS [C]
FROM (
    SELECT COUNT(1) AS [CNT]
    FROM [dbo].[EmailTable] AS [table1]
    WHERE ([table1].[INS_ID] = @a)
        AND ([table1].[ACTIVE] = 1)
        AND ([table1].[QUEUED_TO_SEND] = @b)
        AND ([table1].[OWNER_USER_ID] <> @c)
        AND (
            ([table1].[OWNER_USER_ID] IN (- 1))
            OR (N'Allusers' = …
Run Code Online (Sandbox Code Playgroud)

performance join sql-server optimization exists query-performance

5
推荐指数
1
解决办法
380
查看次数