题
我被要求测试对查询的更改,将表值函数(TVF)移至CTE(非恢复)。我的理解是,每个CTE参考都是单独执行的,因此有可能导致tempdb竞争的变化...
我很惊讶地看到使用CTE时的查询性能有所改善。 IE:
;WITH cte AS (
SELECT t.col FROM dbo.getValues() t)
SELECT ...
JOIN cte c ...
UNION ALL
SELECT ...
JOIN cte c ...
谁能阐明为什么会发生这种情况?
解决方案
我认为行为是“期望”对CTE进行多次评估,但并非总是如此(例如,不能保证它)。可能有很多变量以一种或另一种方式决定行为。您可以分享实际的执行计划吗?
不隶属于 dba.stackexchange