みなさんは、View と Materialized Viewの違いはご存知でしょうか。
私は、Viewといえば仮想的なテーブル?のイメージでいましたが具体的に何が違うのか理解できていなかったのでここにメモとして残したいと思います。
View(ビュー)とは
まず、前提となるViewとはなんだったのかの確認からしていきましょう。
View(ビュー)とは、複数のテーブルからデータを取得し一時的に作成した仮想的なテーブルのこと
postgreSQLでは、以下のコマンドで実行できる。
-- Viewを作成する
CREATE VIEW ビュー名 AS SELECT文...;
-- Viewを削除する
DROP VIEW ビュー名;
- メリット
- クエリをシンプルにできる
- 容量を圧迫しない。
- レコードは保存せずに使用するSELECT文を保存しているため。
- デメリット
- パフォーマンスが劣化する可能性がある
- データ量が多い場合や複雑なクエリの場合にはパフォーマンスが低下する可能性がある
- パフォーマンスが劣化する可能性がある
Materialized View(マテリアライズドビュー)とは
Materialized View(マテリアライズドビュー)とは、Viewと同じく複数のテーブルからテーブルを作成する。
ただし、仮想ではなく実体化されたビューであり実データを保持する。
postgreSQLでは、以下のコマンドで実行できる。
-- Materialized Viewを作成する
CREATE MATERIALIZED VIEW ビュー名 AS SELECT文...;
-- 最新のデータで作成する
REFRESH MATERIALIZED VIEW ビュー名;
- メリット
- パフォーマンスが改善できる
- 主キーやindexが定義できる
- パフォーマンスが改善できる
- デメリット
- リフレッシュが必要
- 仮想的なビューと違い使用している表のレコードと食い違ってくる
- そのため、定期的なリフレッシュが必要
- 普通のテーブル同様に容量を圧迫する
- リフレッシュが必要
まとめ
Viewの使い所
Viewは、最新のデータをリアルタイムで反映できますが、パフォーマンスが低下する可能性がある。
更新がおこなわれやすいテーブルや複雑なクエリを単純化したいときなどに適している。
Materialized Viewの使い所
Materialized Viewは、読み込みのパフォーマンスは速度が早くハイパフォーマンスが見込めるが、データの更新が多いテーブルには不向きである。
更新があまりおこなない、または最新のデータを必要としない場合やViewではパフォーマンスに問題がある場合などに適している。