我试图索引我的视图,因为数据是相对静态的,它可以提高性能。
我无法索引视图,因为它包含“排名或聚合窗口函数”。有解决方法吗?
SELECT r.Id, r.Value, r.TestSessionId, t.Type AS TestType, r.StudentId, ROW_NUMBER() OVER (partition BY r.StudentId, r.TestSessionId ORDER BY r.Id) AS AttemptNumber
FROM dbo.Responses r
INNER JOIN dbo.TestSessions ts ON r.TestSessionId = ts.Id
INNER JOIN dbo.Tests t ON ts.TestId = t.Id
这个视图只是在学生对问题的回答中添加了一个尝试次数,我认为这对于索引视图来说是一个完美的场景,但是 SQL Server 不支持对具有窗口函数的视图进行索引。
我可以手动生成一个缓存表,但我希望这是低维护的,所以我不必记住做这样的事情:
例如,也许我可以创建某种触发器(我不熟悉触发器),当基表更改时将视图插入缓存表......这基本上是视图上的索引应该做的事情在底层(虽然效率更高,因为它可以更新索引而不是在基表数据更改时完全替换它)。