请考虑以下情况(为了问题而简化):
我在 SQL Server 2012 数据库中有以下表:
Parent_Table
Id | Parent table fields
----+--------------------
1 | ...
2 | ...
3 | ...
...
Child_Table
Id | ParentId | Child table fields
----+----------+-------------------
1 | 2 | ...
2 | 1 | ...
3 | 1 | ...
4 | 3 | ...
5 | 2 | ...
...
Big_Table
Id | ChildId | Value | Status | Other fields
--------+----------+--------|---------------------
1 | 12 | 672 | Closed |
2 | 23 | 133 | Closed |
3 | 7 | 2611 | Open |
4 | 14 | 84 | Closed |
...
1295769 | 23 | 458 | Closed |
1295770 | 18 | 1046 | Open |
1295771 | 7 | 8 | Open |
Child 和 Parent 表相对较小(大约 100 个 Parent 条目和每个 parent 5 个 Child 条目)并且它们的条目每天只插入或删除几次。
另一方面,“大表”正在快速增长(为了讨论,每秒 100 个条目),并且行的状态在一段时间后变为 Closed(想想客户端会话,这里实际上就是这种情况)。
我需要定期(每隔几秒)为指定的 Parent.Id 提供 Big_Table 行数和 Big_Table.Value 列的总和-每次都不同。
我怀疑直接的实现(使用内部连接等)可能效率极低,更好的解决方案可能包括附加表、某种计数器表,或者我应该在我的服务代码中实现它(?!)并小心不知何故的坚持。
实施上述内容的“正确”(效率方面)方式是什么?处理额外级别的父母/孩子的解决方案将是最好的解决方案。