1対多の関係にある2つのテーブルがあります。テーブルの各行について、の行を参照する0個以上の行がテーブルfooに存在する可能性があるとします。barfoo
クライアントは、のすべての行について、の行をbar参照する行の数を知りたいと考えています。foofoo
私は次のクエリでこれを達成することができます:
SELECT count(bar_id) FROM bar WHERE bar.foo_id = foo.foo_id;
しかし、テーブルfooとbarが大きかった場合はどうなりますか?Sayfooには100万行あり、bar1000万行あります。fooまた、の行の99%が、それを参照する行の数が1,000行未満であるとしましょうbar。クライアントが通常、一度に約100行を要求するとしますfoo。
外部キーのインデックスを使用してnaivecount()クエリを使用する必要がありますか、それともカウンターを保持する方がよいでしょうか?カウンターを維持することさえ可能ですか?のトリガーを使用してアトミックインクリメントとデクリメントでカウンターを更新することでbar、それは可能だと思いますが、間違っている可能性があります。