小编tuk*_*aef的帖子

使用 union all 和 join 连接两个子查询会导致执行计划不理想

我在生产环境中遇到了类似的问题,但我设法在Northwind DB上重现了这种行为。

考虑以下查询:

USE NORTHWND; 
DECLARE @ids TABLE ( Id NCHAR(50) );
INSERT  INTO @ids
VALUES  ( N'AROUT' ),
        ( N'ALFKI' );

SELECT  *
FROM    ( SELECT    c.CustomerID
          FROM      dbo.Customers c
          WHERE     c.CustomerID IN ( SELECT    Id
                                      FROM      @ids )
          UNION ALL
          SELECT    '0'
        ) t1
JOIN    ( SELECT    o.CustomerID
          FROM      dbo.Orders o
          --LEFT JOIN dbo.[Order Details] od ON o.OrderID = od.OrderID
          UNION ALL
          SELECT    '0'
        ) t2 ON t2.CustomerID = t1.CustomerID
OPTION  ( RECOMPILE );
Run Code Online (Sandbox Code Playgroud)

它有很好的查询计划: 好计划

现在,当我取消注释 …

performance sql-server execution-plan

6
推荐指数
1
解决办法
5232
查看次数

标签 统计

execution-plan ×1

performance ×1

sql-server ×1