TL

マテリアライズドビュー

ビューの結果を実体として保存し、高速に参照できる仕組みです。通常のビューとの違い、リフレッシュによる更新、向き不向きを解説します。

中級マテリアライズドビュービューデータベース最終更新: 2026-06-06
TL;DR要点だけ先に
  • 1.マテリアライズドビューはビューの結果を実体(テーブル)として保存し、参照を高速化する仕組み。
  • 2.通常のビューは参照のたびに毎回計算するが、こちらは計算済みの結果を読むだけで速い。
  • 3.結果は自動では最新化されず、リフレッシュで更新する。鮮度より速度を取る集計・レポートに向く。

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

複雑な集計クエリ(多数の結合や GROUP BY を含むもの)は、実行のたびに時間がかかります。ダッシュボードの数値のように 何度も同じ重い結果を参照する 場面では、毎回計算し直すのは無駄です。

マテリアライズドビュー(実体化ビュー) は、クエリの 結果そのものをテーブルのように保存 しておき、参照時はその保存済みデータを読むだけで済ませる仕組みです。「materialize(実体化する)」の名の通り、計算結果に実体を持たせるのがポイントです。

-- 日別の売上集計を実体化して保持する
CREATE MATERIALIZED VIEW daily_sales AS
SELECT date_trunc('day', created_at) AS day,
       SUM(amount) AS total
FROM   orders
GROUP  BY 1;

以後、SELECT * FROM daily_sales; は集計を走らせず、保存済みの結果を即座に返します。

通常のビューとの違い

名前は似ていますが、通常のビューマテリアライズドビュー は中身が大きく異なります。通常のビューは「保存された SELECT 文(名前を付けた問い合わせ)」にすぎず、データは持ちません。参照するたびに元の SQL がその場で実行されます。

観点通常のビューマテリアライズドビュー
実体(データ)持たない(定義だけ)結果をテーブルとして保持
参照時の処理毎回クエリを実行保存済みの結果を読むだけ
速度元クエリ次第(重いと遅い)速い(計算済み)
データの鮮度常に最新リフレッシュした時点のもの
容量ほぼ消費しない結果ぶんのディスクを使う

つまり、通常のビューは 常に最新だが毎回計算が走る、マテリアライズドビューは 速いが鮮度はリフレッシュ時点 という、速度と鮮度のトレードオフになっています。

どちらを選ぶかは“鮮度 vs 速度”で決める

リアルタイムの正確さが必要な処理(残高や在庫の確定値など)は、常に最新を返す通常のビューやテーブル直接参照が向きます。一方、多少古くても許容でき、とにかく速く返したい集計(前日までの売上推移、利用統計など)はマテリアライズドビューの出番です。「この画面は何分前のデータまで許せるか」を起点に選ぶと迷いません。

リフレッシュ(更新)

マテリアライズドビューは保存済みのスナップショットなので、元のテーブルが変わっても 自動では最新になりません。最新の結果に作り直す操作が リフレッシュ です。

-- 集計をやり直して内容を最新化する
REFRESH MATERIALIZED VIEW daily_sales;

リフレッシュには主に 2 つの考え方があります。

  • 完全リフレッシュ: 元クエリをまるごと再実行して全件作り直す。単純だが、重い集計だとそれ自体に時間がかかる。
  • 増分リフレッシュ: 前回以降に変わったぶんだけを反映する。速いが、DB 製品によって対応状況や条件が異なる。

更新のタイミングも設計事項です。夜間バッチで 1 日 1 回、数分おきにスケジュール実行、元テーブル更新を起点に走らせる、など要件に応じて選びます。

リフレッシュ中のロックと負荷に注意

素朴な REFRESH MATERIALIZED VIEW は、処理中そのビューへの参照をブロックする場合があります。利用者がいる時間帯に重い完全リフレッシュをかけると、画面が固まったように見えることがあります。PostgreSQL の CONCURRENTLY オプションのように、参照を止めずに更新できる仕組みや、負荷の低い時間帯への割り当てを検討しましょう。なお、表示しているデータが「いつ時点のものか」をユーザーに示しておくと、鮮度の誤解も防げます。

向いている場面

マテリアライズドビューが効くのは、おおむね次のような条件がそろうときです。

  • 集計や結合が 重く、実行に時間がかかる。
  • 同じ結果を 何度も参照 する(書き込みより読み取りが多い)。
  • 結果が 多少古くても許容 できる。
向いている例向かない例
日次・月次の売上レポート残高や在庫の確定値など即時性が要るもの
利用統計ダッシュボード1 回しか使わない使い捨ての集計
重い結合の結果の再利用元データが秒単位で変わり続ける指標

マテリアライズドビューは「重い計算を一度だけ行い、結果を使い回す」ための道具です。鮮度を少し諦める代わりに参照を劇的に速くできるので、レポートや集計ダッシュボードのように 読みが多く即時性が低い 用途で特に威力を発揮します。

データベース Article

マテリアライズドビューを実務で読む

TL;DRは入口です。実際に選ぶ・使う段階では、何を解決するか、何と比較するか、導入後にどこで詰まるかまで見る必要があります。

解決すること

マテリアライズドビュー

比較で見る軸

難易度: intermediate / カテゴリ: データベース / タグ数: 3

導入後に効く点

通常のビューは参照のたびに毎回計算するが、こちらは計算済みの結果を読むだけで速い。

先に潰すリスク

用語だけ覚えても、設計・実装・運用でどこに効くかを確認しないと判断を誤る。

数字・仕様の読み方
難易度
intermediate
カテゴリ
データベース
タグ数
3

判断チェックリスト

  • 自社の用途が「マテリアライズドビュー / ビュー」に近いか確認する。
  • 強みである「マテリアライズドビューはビューの結果を実体(テーブル)として保存し、参照を高速化する仕組み。」が本当に評価軸になるか確認する。
  • 注意点の「用語だけ覚えても、設計・実装・運用でどこに効くかを確認しないと判断を誤る。」を運用で吸収できるか確認する。
  • 公開値や仕様値は、対象プラン・対象機種・対象リージョンまで確認する。
  • 既存システム、ID、ネットワーク、監視、バックアップとの接続方法を先に洗い出す。
  • 小さく試してから、本番移行、権限設計、障害時手順、コスト監視を決める。

次に確認する観点

マテリアライズドビュービューデータベースマテリアライズドビュービューデータベース
参考: 公式情報