@tomatommy

Are you sure you want to delete the question?

If your question is resolved, you may close it.

Leaving a resolved question undeleted may help others!

We hope you find it useful!

GROUP BY 関数の実行を高速化する方法

解決したいこと

環境:PostgreSQL 16.11

100万を超えるテーブルにて、カーディナリティが高々 1000 の属性があります。
index を用いるなどして、この属性で group by した結果を高速に取得する方法を伺いたいです。


具体例を交えます。

100万 レコードある users テーブルがあったとして、
family_name カラムの種類は高々 1000 だとします。

id family_name age score
1 佐藤 32 1023
2 斎藤 35 3541
3 佐藤 22 2446
4 田中 14 3654
5 佐藤 56 1257
6 斎藤 51 3214

ここで、

select avg(age) from users group by name;

を高速に実行したい。

解決案1:Materialized View を使う

処理パフォーマンスこそ変わらないものの、計算結果をキャッシュしておく。

:warning: ただし、score のように、高頻度で更新される値に対して集約関数を実行する必要が出た場合、cache のオーバーヘッドが大きくなってしまう。

0 likes

1Answer

100万件程度であれば、(DBサーバのスペックにも依りますが、)それほど時間はかからないと思うのですが、どれほどの高速化を目指しているのでしょうか?

0Like

Your answer might help someone💌