マテリアライズドビュー

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

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

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

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

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

ビューとマテリアライズドビューの違いを以下にまとめる。

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

PostgreSQL での使用

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
スケジュール定期的に再計算日次/時間ごとの集計

使うべきケース

使うべきケースを以下に示す。

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

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

この記事は役に立ちましたか?

関連用語

関連する記事