我有两个处于一对多关系的表。假设对于 table 中的每一行, tablefoo
中可以有 0 或更多行bar
引用 中的行foo
。
客户想知道 中的所有行在 中bar
引用了多少行。foo
foo
我可以通过以下查询完成此操作:
SELECT count(bar_id) FROM bar WHERE bar.foo_id = foo.foo_id;
foo
但是,如果桌子bar
很大怎么办?Sayfoo
有 100 万行,并且bar
有 1000 万行。假设 99% 的行引用它的行foo
数少于 1,000行。bar
假设客户通常foo
一次要求大约 100 行。
我应该使用带有外键索引的朴素 count() 查询,还是保留一个计数器更好?甚至可以保留一个柜台吗?通过使用触发器更新计数器的原子增量和减量bar
,我相信这是可能的,但我可能是错的。