Я пытаюсь реализовать очень простой источник событий с помощью 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). Кажется, мне здесь не повезло, поскольку индексированные представления не могут содержать производные таблицы ИЛИ TOP ИЛИ MAX ИЛИ самообъединения.
Любые мысли о том, как я могу создать индексированное представление?
Если это невозможно, я мог бы использовать триггер INSTEAD OF, который обновляет столбец IsLatest BIT в таблице и создает индексированное представление на основе этого фильтра.
Любые другие предложения?