我正在尝试使用 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)。似乎我在这里不走运,因为索引视图不能包含派生表 OR TOP OR MAX OR 自联接。
关于如何创建索引视图的任何想法?
如果这不可能,我可以使用 INSTEAD OF 触发器,它更新表中的 IsLatest BIT 列,并基于此过滤器创建索引视图。
还有其他建议吗?