SQL Server を使用して非常に基本的なイベント ソーシングを実装しようとしています。ライブラリも、他のサーバーも、特別なものもありません。SQL Server を使用する基本から始めてください。
次のテーブルがあるとします。
Id | Name | Data | CreatedOn
1 | Fruit | Apple | <DATE_TIME> Apr 1, 2015
2 | Fruit | Peach | <DATE_TIME> Apr 5, 2015
3 | Fruit | Mango | <DATE_TIME> Apr 10, 2015
4 | Vegetable | Potato | <DATE_TIME> May 20, 2015
5 | Vegetable | Tomato | <DATE_TIME> May 30, 2015
結果が次のようになるように、名前でグループ化された最新のデータを表示するビューを作成したいと思います。
Id | Name | Data | CreatedOn
3 | Fruit | Mango | <DATE_TIME> Apr 10, 2015
4 | Vegetable | Tomato | <DATE_TIME> May 30, 2015
簡単に、CREATE VIEW Latest AS SELECT t1.* FROM table t1 JOIN (SELECT TOP 1 Id FROM table ORDER BY CreatedOn DESC, Id DESC) t2 ON t2.Id = t1.Id;
これで、テーブルに何百万もの行があり、ビューで多数の同時読み取りが行われることになります。それで、インデックスを付けたいと思います(SQL Server Indexed Views)。インデックス付きビューには派生テーブルまたは TOP OR MAX OR 自己結合を含めることができないため、ここでは運が悪いようです。
インデックス付きビューを作成する方法について何か考えはありますか?
それが不可能な場合は、テーブル内の IsLatest BIT 列を更新する INSTEAD OF トリガーを使用し、このフィルターに基づいてインデックス付きビューを作成できます。
他の提案はありますか?