次の場合を考えてみてください(質問のために簡略化されています)。
SQLServer2012データベースには次のテーブルがあります。
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 |
子テーブルと親テーブルは比較的小さく(親ごとに約100個の親エントリと5個の子エントリ)、それらのエントリは1日に数回だけ挿入または削除されます。
一方、「ビッグテーブル」は急速に成長しており(議論のために毎秒100エントリ)、しばらくすると行のステータスがクローズになります(クライアントセッションを考えてみてください。これは実際にはここにあります)。 )。
定期的に(数秒ごとに)指定されたParent.IdのBig_Table行の数とBig_Table.Value列の合計を提供する必要があります-毎回異なるものです。
単純な実装(内部結合などを使用)は非常に非効率的である可能性があり、より良いソリューションには追加のテーブル、ある種のカウンターのテーブルが含まれる可能性があります。または、これをサービスコード(?!)に実装して注意する必要があります。どういうわけか永続性の。
上記を実装するための「正しい」(効率面での)方法は何でしょうか?親/子の追加レベルを処理するソリューションが最適です。