我被要求测试对查询的更改,将表值函数(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进行多次评估,但并非总是如此(例如,不能保证它)。可能有很多变量以一种或另一种方式决定行为。您可以分享实际的执行计划吗?

许可以下: CC-BY-SA归因
不隶属于 dba.stackexchange
scroll top