当我在 CTE 中使用视图时,每个引用 CTE 的子查询似乎都会重新查询该视图。每个子查询都有大量的执行计划重复。从表中选择时不是这种情况。这是预期的吗?有没有办法绕过它?
WITH cte AS (
SELECT v.id
FROM test_view AS v
)
SELECT TOP 25 *,
(SELECT COUNT(*) FROM cte) AS subquery
FROM cte
我正在使用 SQL Server 2005
编辑:
我正在尝试使用以下查询从页面中的视图中获取数据。我需要视图中的总行数、匹配搜索的行数以及匹配行的子集。这在从表中选择时效果很好,但使用视图会导致 CTE 重复执行。我试图从马丁的答案中的链接以各种不同的方式强制中间物化,但没有任何运气。
WITH tableRecords AS (
SELECT *
FROM example_view
),
filteredTableRecords AS (
SELECT *, ROW_NUMBER() OVER (ORDER BY id ASC) AS tableRecordNumber
FROM tableRecords
WHERE 1 = 1
)
SELECT *,
(SELECT COUNT(*) FROM tableRecords) AS totalRecords,
(SELECT COUNT(*) FROM filteredTableRecords) AS totalDisplayRecords
FROM filteredTableRecords
WHERE tableRecordNumber BETWEEN 1 AND 25
ORDER BY tableRecordNumber ASC