0
我有两种与做同样的工作,在这里T-SQL UNION性能问题
查询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 ALL查询以外的这些方式。
检查您的查询计划。我的猜测是,CTE将被折叠以同时提供相同的查询计划,但要确保检查它。 –
对于这两种查询类型,查询计划结果给出的代价非常小,即使时间消耗也几乎不明显。可能会离开它或切换到真实环境进行测试。如果出现性能问题,请进一步调整。无论如何.. – Dean
CTE的行为像macro.CTE是可读性好,但它的表现并不比临时表更好使用临时表,如果可能的话。如果您要连接多个表,并且每个表中都有数百万行记录,则CTE的性能将显着低于临时表。 –