LoginSignup
15
19

More than 3 years have passed since last update.

マテリアライズドビューの機能(PostgreSQL)

Posted at

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

 一般的なビューはテーブルのデータではなく、ビュー定義の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をする必要があります。
 読んでくださり、ありがとうございました。

15
19
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
15
19