マテリアライズドビュー

クエリ結果を事前に計算・保存し、読み取り性能を向上させるデータベースの仕組み

データベースパフォーマンス

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

マテリアライズドビュー (Materialized View) は、複雑なクエリの結果を事前に計算してテーブルとして保存し、読み取り時に再計算を不要にする仕組みである。通常のビュー (仮想テーブル) がクエリ実行時に毎回計算するのに対し、マテリアライズドビューは結果をディスクに保存する。

ビュー vs マテリアライズドビュー

観点 ビュー マテリアライズドビュー
データ保存 なし (クエリ定義のみ) あり (結果をディスクに保存)
読み取り速度 遅い (毎回計算) 速い (事前計算済み)
データの鮮度 常に最新 リフレッシュまで古い
ストレージ 不要 必要

PostgreSQL での使用

-- マテリアライズドビューの作成
CREATE MATERIALIZED VIEW monthly_sales AS
SELECT
  date_trunc('month', created_at) AS month,
  product_id,
  SUM(amount) AS total_sales,
  COUNT(*) AS order_count
FROM orders
GROUP BY month, product_id;

-- 読み取り (事前計算済みなので高速)
SELECT * FROM monthly_sales WHERE month = '2026-03-01';

-- リフレッシュ (最新データで再計算)
REFRESH MATERIALIZED VIEW CONCURRENTLY monthly_sales;

DynamoDB でのマテリアライズドビュー

DynamoDB にはマテリアライズドビューの機能がないが、DynamoDB Streams + Lambda で同等の仕組みを構築できる。

[orders テーブル][DynamoDB Streams][Lambda][monthly_sales テーブル]

リフレッシュ戦略

戦略 説明 用途
完全リフレッシュ 全データを再計算 小〜中規模データ
差分リフレッシュ 変更分のみ更新 大規模データ
リアルタイム イベント駆動で即座に更新 DynamoDB Streams
スケジュール 定期的に再計算 日次/時間ごとの集計

使うべきケース

✅ 適する ❌ 適さない
複雑な集計クエリが頻繁に実行される データの鮮度が最重要
ダッシュボード、レポート 書き込みが読み取りより多い
読み取り性能が重要 ストレージコストが問題

理論と実装の両面から学ぶなら関連書籍が参考になる。

関連用語