我有兩個表在一對多的關係。假設對於表foo
中的每一行,表bar
中可以有0行或更多行,引用foo
中的行。PostgreSQL:count()還是保留一個計數器?
客戶想知道bar
中有多少行參考foo
中的一行,對於foo
中的所有行。
我可以用下面的查詢實現這一點:
SELECT count(bar_id) FROM bar WHERE bar.foo_id = foo.foo_id;
但是,如果表foo
和bar
很大?說foo
有100萬行,並且bar
有1000萬行。我們還要說foo
中99%的行的計數小於1,000 bar
行引用它。假設客戶通常每次要求大約100行foo
。
我應該使用帶外鍵索引的naive count()查詢,還是保留一個計數器會更好?是否有可能保留一個櫃檯?通過使用bar
上的觸發器以原子增量和減量更新計數器,我相信這是可能的,但我可能是錯的。