#マテリアライズドビューとは
一般的なビューはテーブルのデータではなく、ビュー定義のSELECT文だけ保持しています。ビューへSELECTをすると、ビュー定義のSELECT文を使って、テーブルへのSELECTに書き換えています。そしてテーブルのデータを返します。
マテリアライズドビューは、テーブルのデータ自体を保持しているビューのことです。マテリアライズドビューへSELECTすると、マテリアライズドビューのデータをそのまま返しています。そのため、ビューへの問い合わせのときよりも、すぐに結果を返すことができます。
#マテリアライズドビューの作成方法
マテリアライズドビューは以下のようにして作成することができます。MATERIALIZEDと書く以外は、ビューの作成と同じです。
書き方:CREATE MATERIALIZED VIEW マテリアライズドビュー名 AS (SELECT文);
postgres=# select * from have_money_table ; --マテリアライズドビューの元のテーブルの確認
id | name | money
----+------+-------
1 | aoi | 2000
2 | sato | 4000
3 | kato | 5000
(3 rows)
postgres=# create materialized view mat_money_view as select id, money from have_money_table; --マテリアライズドビューの作成
SELECT 3
postgres=# select * from mat_money_view ; --マテリアライズドビューの確認
id | money
----+-------
1 | 2000
2 | 4000
3 | 5000
(3 rows)
#マテリアライズドビューの注意点
マテリアライズドビューは、作成後そのままにしておくとデータが古くなることに注意が必要です。マテリアライズドビューは、マテリアライズドビュー作成時のテーブル情報を保持するだけであり、その後のテーブルへの更新処理(UPDATEやDELETE)によって更新されないためです。
マテリアライズドビューの内容をテーブルの最新の状態と同じにしたいときには、REFRESH MATERIALIZED VIEWを実行します。
書き方:REFRESH MATERIALIZED VIEW マテリアライズドビュー名;
postgres=# update have_money_table set money=1000 where id=1; --元のテーブルを更新
UPDATE 1
postgres=# select * from have_money_table ; --元のテーブルの状態を表示
id | name | money
----+------+-------
1 | aoi | 1000
2 | sato | 4000
3 | kato | 5000
(3 rows)
postgres=# select * from mat_money_view ; --マテリアライズドビューの確認(更新されていないことがわかる)
id | money
----+-------
1 | 2000 --moneyが1000になっていない
2 | 4000
3 | 5000
(3 rows)
postgres=# refresh materialized view mat_money_view; --マテリアライズドビューの更新
REFRESH MATERIALIZED VIEW
postgres=# select * from mat_money_view ; --マテリアライズドビューが更新されたか確認
id | money
----+-------
1 | 1000
2 | 4000
3 | 5000
(3 rows)
#まとめ
マテリアライズドビューはデータ自体を保持しているビューなので、問い合わせの結果をすぐに返すことができます。しかし、そのデータは古くなるので、REFRESHをする必要があります。
読んでくださり、ありがとうございました。