今回は、Silverの「開発/SQL - SQLコマンド(マテリアライズド・ビュー)」からの出題です。
※この例題は実際のOSS-DB技術者認定試験とは異なります。
例題公開日:2019年4月9日
マテリアライズド・ビューは PostgreSQL 9.4 で追加された機能で、ビューとしての機能とテーブルとしての機能を併せ持った特徴があります。
通常のビューは CREATE VIEW コマンドで作成しますが、マテリアライズド・ビューは CREATE MATERIALIZED VIEW
コマンドで作成します。どちらもコマンド名の後は「ビュー名 AS 問い合わせ(SELECT文)」の形式になります。
通常のビューは、その問い合わせのSELECT文をデータベースに記録するだけですが、マテリアライズド・ビューでは、問い合わせの結果をデータベースに保存します。つまり、CREATE MATERIALIZED VIEW の内部処理は
CREATE TABLE テーブル名 AS SELECT文
に近いことを行っています。
通常のビューから検索するときは、ビュー定義自体の SELECT文を実行した上で検索のSQLを実行する必要があるのに対し、マテリアライズド・ビューからの検索では、CREATE MATERIALIZED VIEW の実行時に保存されたデータから直接検索を実行するため、高速になります。特に、ビューの定義で複数のテーブルを結合しているとき、複雑なWHERE句を含むとき、グループ化演算を含むときなど、マテリアライズド・ビューであれば、これらの処理を実施済みのデータから検索することになるため、高速になります。
マテリアライズド・ビューは高速ですが、良い点ばかりとは限りません。ビュー定義のSELECT文の結果をデータベースに保存するため、元となるテーブルのデータとは別にディスクを消費します。通常のビューであれば、ビューを定義するSELECT文が保存されるだけで、追加のディスク容量は必要としません。
また、マテリアライズド・ビューの作成時に保存されたデータは、元となるテーブルが更新されても、自動的には更新されません。通常のビューであれば、元のテーブルが更新されたら、ビューからの検索結果もそれに合わせて変わりますが、マテリアライズド・ビューからの検索結果は変化せず、以前と同じ結果が返ります。元のテーブルの更新をマテリアライズド・ビューに反映させるためには REFRESH MATERIALIZED VIEW というコマンドを使用します。CREATE あるいは REFRESH の直後は、どちらのビューでも同じ結果が得られますが、基本的に、マテリアライズド・ビューと通常のビューで同じ結果が返るとは限りませんので、必ずしも最新のデータに基づく結果でなくても良い場合にのみ、マテリアライズド・ビューを使うようにします。
ビューを定義するSELECT文を変更するには、CREATE OR REPLACE VIEW を使用することができますが、マテリアライズド・ビューでは(PostgreSQL 11の時点では)これに相当するコマンドがなく、DROP MATERIALIZED VIEW と CREATE MATERIALIZED VIEW を順次実行することになります。
従って正解はBとDです。
今回の解説について、理解できないポイントがあればどんどん質問をお寄せ下さい。
採用になった方にはLPI-Japanオリジナルの記念品を贈呈します。
※試験問題に関わるお問い合わせにつきましては、LPI-Japan事務局ではお応えできませんのでご了解ください。
© EDUCO All Rights Reserved.