ビューとは
- 複雑な処理を1つの処理にまとめる機能である
- SELECT文を置き換えたもの。(つまり、SELECT ≒ ビュー)
- 実体としてのデータを持たないため、仮想的なテーブルとも呼ばれる。
- 実体としてのデータを持たない=ビューを実行するたびに、ビューに定義されたSELECT文を発行している。
- ビューの中にビューを定義することもできるが処理が遅くなる。
- メリット:
- ビューを定義しておくことで毎回、複雑なSELECT文を書かなくて済む。
- シンプルなSQL文を書くことができる。
- 効率化、セキュリティ的にメリットがある。
- デメリット:
- 処理速度が遅い(データの実体を持たないため)
マテリアライズドビューとは
- ビューと同じように、複雑なSQL文のSELECT結果を頻繁に取得する場合に使用する機能。
- ビューは定義したSQL文で取得するデータを保持しない(データの実体がない)のに対し、マテリアライズドビューでは対象のデータをキャッシュし、実体として保持する。
- マテリアライズドビューではデータの実体を保持するため、元のテーブルが変更された場合は、マテリアライズドビューが保持していいる実体が古くなっているため、マテリアライズドビュー自体も更新しなければいけない。
- PostgreSQLではマテリアライズドビューの更新はREFRESH MATERIALIZED VIEWコマンドによって手動で行う(自動では行われない)。
- スナップショット。
- メリット:
- マテリアライズドビューに定義したSELECT文の結果を常に持つ(データの実体を持つ)ため、ビューに比べて高速。
- デメリット:
- データの実体を持つため、マテリアライズドビュー作成後から実体のデータが古くなってしまう可能性がある。
- それに対応するように、最新のものに更新するコマンドがある。作成方法もビューと多少異なる。
両者の違い
- SELECT文の置き換えで、SELECT結果を返すという役割は同じ
項目 | ビュー | マテリアライズドビュー |
---|---|---|
処理速度 | 遅 | 早 |
データ保持 | しない | する |
参照時の処理 | SQLを発行し、結果を返す | 保持しているデータを返す |
主な利用目的 | セキュリティ確保など | パフォーマンス向上など |
ビューの作成、変更、削除
作成
書式:CREATE VIEW ビュー名 AS SELECT文;
ビュー(VIEW_DBLIST)の作成
postgres=# CREATE VIEW VIEW_DBLIST AS
postgres-# SELECT oid, datname
postgres-# FROM
postgres-# pg_database
postgres-# ;
変更
- ビューの変更方法は3通り
-
Create OR Replace VIEW
コマンドを用いて変更する場合 - ビューを削除して新たに作成する場合
ALTER VIEW
-
Create OR Replace VIEW
コマンドを用いて変更する場合
-
Create OR Replace VIEW
に指定したビューが無ければ新たに作成し、ビューがあれば変更する
ビュー(VIEW_DBLIST)の変更
postgres=# CREATE OR REPLACE VIEW VIEW_DBLIST AS
postgres-# SELECT *
postgres-# FROM pg_database
postgres-# WHERE oid > 0
postgres-# ;
削除
ビュー(VIEW_DBLIST)の削除
postgres=# DROP VIEW VIEW_DBLIST;
マテリアライズドビューの作成、変更、削除
作成
書式:CREATE MATERIALIZED VIEW マテリアライズドビュー名 AS SELECT文;
マテリアライズドビュー(VIEW_DBLIST)の作成
postgres=# CREATE MATERIALIZED VIEW mymatview AS
postgres-# SELECT oid, datname
postgres-# FROM
postgres-# pg_database
postgres-# ;
変更
- マテリアライズドビューの変更方法は2通り
ALTER MATERIALIZED VIEW
- マテリアライズドビューを削除して新たに作成する場合
マテリアライズドビューのカラムを変更(ALTER MATERIALIZED VIEW)
- マテリアライズドビューが所有するテーブルのカラム名を変更する
- 以下の例では、マテリアライズドビューが所有するテーブルのnameカラムをzoo_nameカラムに名前を変更する
postgres=# ALTER MATERIALIZED VIEW ビュー名 RENAME name TO zoo_name;
更新(最新のテーブルに更新)
書式:REFRESH MATERIALIZED VIEW マテリアライズドビュー名;
-
REFRESH MATERIALIZED VIEW
コマンドを用いて変更する場合(最新のテーブルに更新)
マテリアライズドビュー(VIEW_DBLIST)を最新に更新
postgres=# REFRESH MATERIALIZED VIEW VIEW VIEW_DBLIST;
削除
書式:DROP MATERIALIZED VIEW マテリアライズドビュー名;
マテリアライズドビュー(VIEW_DBLIST)の削除
postgres=# DROP MATERIALIZED VIEW VIEW_DBLIST;