我被要求测试对查询的更改,将表值函数 (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 ...
任何人都可以阐明为什么会这样吗?