T-SQL UNION性能问题

时间:2015-12-11 06:27:00

标签: sql-server performance union common-table-expression

我有两种查询,在这里做同样的工作

查询1:

SELECT MP.MemberName FROM MemberProfile MP 
LEFT JOIN Order O ON MP.MemberID = O.MemberID
WHERE O.TotalAmount >= 100

UNION

SELECT MP.MemberName FROM MemberProfile MP
LEFT JOIN Order O ON MP.MemberID = O.MemberID
WHERE O.Quantity >= 10

查询2:

;WITH cte AS (
     SELECT MP.MemberName, O.Quantity, O.TotalAmount FROM MemberProfile MP 
     LEFT JOIN Order O ON MP.MemberID = O.MemberID
)
SELECT MemberName FROM cte WHERE TotalAmount >= 100

UNION

SELECT MemberName FROM cte WHERE Quantity >= 10

在真实环境中会有更复杂的查询,这些只是一个简单的版本供其他人阅读

问题:

  1. 根据性能和冗余度,使用CTE而不是每次使用JOIN会更好吗?

  2. 除了这些方式之外,是否有更好的方法来执行此UNION甚至UNION ALL查询。

1 个答案:

答案 0 :(得分:0)

我不认为在你的情况下CTE和JOIN之间会有很大的不同。 SQL Server优化会将其转换为完全不同的东西,这两个查询可能会产生相同的结果。如果选择性很高,您可以尝试在TotalAmount和Quantity上添加索引。