我有两种查询,在这里做同样的工作
查询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
在真实环境中会有更复杂的查询,这些只是一个简单的版本供其他人阅读
问题:
根据性能和冗余度,使用CTE而不是每次使用JOIN会更好吗?
除了这些方式之外,是否有更好的方法来执行此UNION甚至UNION ALL查询。
答案 0 :(得分:0)
我不认为在你的情况下CTE和JOIN之间会有很大的不同。 SQL Server优化会将其转换为完全不同的东西,这两个查询可能会产生相同的结果。如果选择性很高,您可以尝试在TotalAmount和Quantity上添加索引。