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 を使う
処理パフォーマンスこそ変わらないものの、計算結果をキャッシュしておく。
ただし、score のように、高頻度で更新される値に対して集約関数を実行する必要が出た場合、cache のオーバーヘッドが大きくなってしまう。
0 likes