我有一个存在严重性能问题的视图,因为我将它链接到使用另一个视图的 CTE,具有相同的表引用。
WITH
splits(ID, [NEW TEU])
AS
(SELECT s.[DTL ID] AS ID, s.[NEW TEU]
FROM [POTS].[vwSPLITCARGO] AS s)
SELECT *
FROM [MISNT].[CARGO_MANIFEST_DETAIL_VIEW] AS cmd
LEFT JOIN splits AS s ON s.ID = cmd.ID
该vwSPLITCARGO
视图引用同一个CARGO_MANIFEST_DETAIL_VIEW
表来进行计算。
我知道为什么它很慢。这是因为vwSPLITCARGO
视图正在从同一CARGO_MANIFEST_DETAIL_VIEW
视图中读取 CTE 中已存在的每条记录的所有数据。事实上,vwSPLITCARGO
总是返回相同的小记录集(大约 4 或 6 条记录)。我不需要它来获取那些记录。一次会很棒!
有没有办法让 CTE 表现得像一个临时表,因为它只检索一次记录,而不是一遍又一遍地处理?
告诉 CTE:CASE WHEN RunOnce = 0 THEN "do it" ELSE "don't do it" END
没有用于假脱机或实现 CTE 的查询提示。所以使用临时表,并可选择索引临时表。