【まてりあらいずどびゅー】

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

最終更新:
💡 集計結果を保存して、次の読み取りに使う

クエリの結果を実体として保存し、後の参照に利用する仕組み。重い集計の繰り返しを減らせる一方、保存容量や更新処理が必要で、データの鮮度と更新方法は製品・設定による。

📌 このページのポイント
集計結果を保存して再利用する通常のビュー実体化したビュー元データ元データ定義に従い計算結果を保存計算結果を読む保存結果を読む更新方法と鮮度は、製品・設定で確認
通常のビューと保存結果の利用を左右で比較した簡略図。PostgreSQLの実体化したビューはREFRESHで更新します。保存結果を使うことで集計の繰り返しを減らせますが、速度や鮮度は条件次第です。
ひよこ ひよこ
普通のビューとどう違うの?
ペンギン先生 ペンギン先生
通常のビューは問い合わせの定義を保存するけれど、マテリアライズドビューは結果データも保存するよ。例えば日別の売上合計を用意しておけば、読むたびに元の明細を全部集計する処理を減らせるんだ
ひよこ ひよこ
保存すれば、必ず速くなる?
ペンギン先生 ペンギン先生
必ずではないよ。繰り返し使う重い集計などでは役立つけれど、結果の量やインデックス、読み方にもよる。保存容量と更新の処理も必要だから、実際の利用条件で確認しよう
ひよこ ひよこ
元のデータが変わると、どうなるの?
ペンギン先生 ペンギン先生
PostgreSQLでは元のテーブルの変更だけで保存結果が自動更新されるわけではなく、REFRESH MATERIALIZED VIEWで更新するよ。一方、BigQueryには自動更新や差分を使う仕組みがある。同じ呼び名でも、更新方式や鮮度の条件を確認しよう
ひよこ ひよこ
PostgreSQLの更新中も読める?
ペンギン先生 ペンギン先生
CONCURRENTLYを指定すれば、読み取りを締め出さずに更新できるよ。ただし、全行を含む列名だけのUNIQUEインデックスがあり、すでに結果が入っていることなどが条件だね。通常の更新は読み取りをブロックする場合がある
ひよこ ひよこ
いつ更新すればいいの?
ペンギン先生 ペンギン先生
必要な鮮度と、更新の負荷を考えて決めよう。例えば前日までの集計なら夜に更新する構成が考えられる。最新の値が必要な画面に古い結果を返さないよう、製品の仕組みと更新が失敗したときの扱いも確認するんだ
ペンギン
まとめ:ざっくりこれだけ覚えればOK!
「マテリアライズドビュー」って出てきたら「クエリの結果を保存して再利用する仕組み」と思えばだいたいOK!
📖 おまけ:英語の意味
「Materialized View」 = 実体化された(Materialized)ビュー(View)
💬 Materializeは「実体化する」。通常のビューが仮想テーブルなのに対し、実体を持つビューという意味

参考資料

← 用語集にもどる