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