用語集のすべての用語

マテリアライズドビュー

PostgreSQL のマテリアライズドビューとは?

マテリアライズドビューはクエリの結果を保存し、テーブルのように読み取れるようにします。読み取りは高速ですが、データが変わるのは REFRESH MATERIALIZED VIEW を実行したときだけです。

マテリアライズドビューは、定義クエリを一度実行してその結果を保存します。読み取るたびにクエリを実行する通常のビューとは異なります。読み取りはテーブルと同じくらい高速で、独自のインデックスを持つこともできます。

保存されたデータは基になるテーブルの変更に追従せず、REFRESH MATERIALIZED VIEW を実行したときにだけ変わります。通常のリフレッシュは、実行中にビューの読み取りをブロックします。CONCURRENTLY を付けるとリフレッシュ中も読み取りを続けられますが、ビューに少なくとも 1 つの一意インデックスが必要です。また、変更される行が少ない場合はより高速になることがあります。

例

この例では、地域ごとの売上をマテリアライズドビューで集計し、新しい売上を記録してから、一意インデックスによって可能になる同時リフレッシュでビューを更新します。north の合計に新しい売上が含まれるのは、リフレッシュの後だけです。

CREATE TABLE sales (id int PRIMARY KEY, region text, amount numeric);
INSERT INTO sales
SELECT g, (ARRAY['north', 'south', 'east'])[1 + g % 3], g % 50
FROM generate_series(1, 30000) AS g;

CREATE MATERIALIZED VIEW sales_by_region AS
  SELECT region, sum(amount) AS total FROM sales GROUP BY region;
CREATE UNIQUE INDEX ON sales_by_region (region);

INSERT INTO sales VALUES (30001, 'north', 1000);
REFRESH MATERIALIZED VIEW CONCURRENTLY sales_by_region;
SELECT * FROM sales_by_region ORDER BY region;

拡張機能なしの標準の PostgreSQL 16 または 17 で動くプレーンな SQL です。破棄してかまわない空のデータベースで実行してください。

出典

PostgreSQL 公式ドキュメント(英語)。

関連用語