2

データは比較的静的であり、パフォーマンスが向上する可能性があるため、ビューにインデックスを付けようとしています。

「ランキングまたは集計ウィンドウ関数」が含まれているため、ビューにインデックスを付けることができません。そのための回避策はありますか?

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 はウィンドウ関数を使用したビューのインデックスをサポートしていません。

キャッシュ テーブルを手動で生成することもできますが、これをメンテナンスの手間がかからないようにしたいので、そのようなことを覚えておく必要はありません。

たとえば、おそらく、ベーステーブルが変更されたときにビューをキャッシュテーブルに挿入する何らかのトリガー(トリガーに精通していません)を作成できます...これは基本的に、ビューのインデックスが行うべきことです(ただし、ベース テーブルのデータが変更されたときにインデックスを完全に置き換えるのではなく、インデックスを更新できるため効率が向上します)。

4

0 に答える 0