コンピューティング において、マテリアライズド・ビューとは、クエリの結果を含むデータベース・オブジェクトです。例えば、リモートにあるデータのローカルコピー、テーブルや結合結果の行や列のサブセット、集計関数を使用したサマリーなどです。
マテリアライズドビューを設定するプロセスは、マテリアライゼーションと呼ばれることもあります。[ 1 ]これは、関数型言語における関数の値のメモ化に似た、クエリの結果をキャッシュする形式であり、事前計算の一種として説明されることもあります。[ 2 ] [ 3 ]他の形式の事前計算と同様に、データベースユーザーは通常、パフォーマンス上の理由から、つまり最適化の一形態としてマテリアライズドビューを使用します。[ 4 ]
リモートテーブルに基づいてデータを保存するマテリアライズドビューはスナップショット[ 5 ](非推奨のOracle用語)とも呼ばれていました。
リレーショナル モデルに従うデータベース管理システムでは、ビューはデータベースクエリの結果を表す仮想テーブルです。通常のビューの仮想テーブルに対するクエリまたは更新が行われると、DBMS はこれらを基礎となるベース テーブルに対するクエリまたは更新に変換します。マテリアライズド ビューは異なるアプローチを採用しています。クエリ結果は、ビューそのものではなく、具体的な (「マテリアライズド」) テーブルとしてキャッシュされ、元の基本テーブルから随時更新される可能性があります。これにより、追加のストレージが必要になり、一部のデータが古くなる可能性がありますが、はるかに効率的なアクセスが可能になります。マテリアライズド ビューは、実際のベース テーブルに対する頻繁なクエリがコストがかかる可能性があるデータ ウェアハウスのシナリオで特に使用されます。
マテリアライズド・ビューでは、任意の列にインデックスを構築できます。一方、通常のビューでは、ベーステーブル内のインデックス付き列から直接取得される(またはベーステーブル内のインデックス付き列にマッピングされている)列に対してのみインデックスを利用できます。多くの場合、この機能は全く提供されていません。
実装
オラクル
マテリアライズド・ビューはOracleデータベースで初めて実装されました。クエリ・リライト機能はバージョン8iから追加されました。[ 6 ]
Oracle でマテリアライズド ビューを作成するための構文例:
CREATE MATERIALIZED VIEW MV_MY_VIEW REFRESH FAST START WITH SYSDATE NEXT SYSDATE + 1 AS SELECT * FROM <table_name> ;PostgreSQL
PostgreSQLでは、バージョン9.3以降がマテリアライズドビューをネイティブにサポートしています。[ 7 ]バージョン9.3では、マテリアライズドビューは自動更新されず、作成時にのみデータが入力されます(WITH NO DATAが使用されていない場合)。 を使用して後で手動で更新することもできますREFRESH MATERIALIZED VIEW。[ 8 ]バージョン9.4では、 が使用されている場合、マテリアライズドビューに対するSELECT文と並行して更新が行われることがありますCONCURRENTLY。[ 9 ]
PostgreSQL でマテリアライズド ビューを作成するための構文例:
マテリアライズド・ビューMV_MY_VIEWを作成します[ WITH ( storage_parameter [ = value ] [, ... ]) ] [ TABLESPACE tablespace_name ] AS SELECT * FROM < table_name > ;SQL サーバー
Microsoft SQL Serverは、「インデックスビュー」と呼ばれる概念を用いてマテリアライズドビューを実装する点で、他のRDBMSとは異なります。主な違いは、インデックスビューはビューを構成するテーブルの元のデータと常に同期されているため、更新を必要としないことです。これを実現するには、元の行と宛先の行のマッピングが「決定論的」である必要があり、これにより、このマッピングを実行できるクエリの種類が制限されます。このメカニズムは、SQL Server 2000バージョン以降で実現されています。
SQL Server でマテリアライズド ビューを作成するための構文の例:
CREATE VIEW MV_MY_VIEW WITH SCHEMABINDING AS SELECT COL1 , SUM ( COL2 ) AS TOTAL FROM <table_name> GROUP BY COL1 ; GO CREATE UNIQUE CLUSTERED INDEX XV ON MV_MY_VIEW ( COL1 ) ;ストリーム処理フレームワーク
Apache Kafka(v0.10.2以降)、Apache Spark(v2.0以降)、Apache Flink、Kinetica DB、[ 10 ] Materialize、[ 11 ] RisingWave、[ 12 ] Epsio [ 13 ]はすべて、データストリームのマテリアライズドビューをサポートしています。
その他
マテリアライズド・ビューはSybase SQL Anywhereでもサポートされています。[ 14 ] IBM Db2では、「マテリアライズド・クエリ・テーブル」と呼ばれています。[ 15 ] ClickHouseは、マージ時に自動的に更新されるマテリアライズド・ビューをサポートしています。[ 16 ] MySQLはネイティブではマテリアライズド・ビューをサポートしていませんが、トリガーまたはストアド・プロシージャ[ 17 ]を使用するか、オープンソース・アプリケーションのFlexviewsを使用することで回避策を実装できます。[ 18 ]マテリアライズド・ビューは、DynamoDB Streamsによってキャプチャされたデータ変更イベントを使用してAmazon DynamoDBに実装できます。Googleは2020年4月8日に[ 19 ] BigQueryのマテリアライズド・ビューをベータ版として 提供することを発表しました。 [ 20 ]
参考文献
- ^比較: CJ Date (2006年8月28日). 『リレーショナルデータベース辞書:リレーショナル用語と概念の包括的な用語集、具体例付き』 . O'Reilly Media, Inc.. 59ページ. ISBN 978-1-4493-9115-7. 2016年10月26日取得。
実体化[:] ビューに対する操作を実装するための、やや単純な手法。(a) ビューを定義する関係式は操作の呼び出し時に評価され、(b) ビューが実体化され、(c) 当該の操作は実体化された関係に対して実行される。
- ^カレン・モートン;ケリー・オズボーン。ロビン・サンズ。リヤジ・シャムスディーン。ジャレッド・スティル(2013年10月28日)。プロのOracle SQL。アプレス。 p. 48.ISBN 978-1-4302-6220-6。
- ^ Marie-Aude Aufaure、Esteban Zimányi (2012年1月16日).ビジネスインテリジェンス:第1回ヨーロッパサマースクール、EBISS 2011、パリ、フランス、2011年7月3日~8日、チュートリアル講義. Springer Science & Business Media. 43ページ. ISBN 978-3-642-27357-5。
- ^ Michael L. Gonzales (2003年2月25日). IBM Data Warehousing: with IBM Business Intelligence Tools . John Wiley & Sons. p. 214. ISBN 978-0-471-45736-7。
- ^ CJ Date (2006年8月28日). 『リレーショナルデータベース辞書:リレーショナル用語と概念の包括的な用語集、具体例付き』 . O'Reilly Media, Inc.. 59ページ. ISBN 978-1-4493-9115-72016年10月26日閲覧。
マテリアライズド・ビュー[:] スナップショットの非推奨用語。[...] 問題は、[...] (定義が示すように) スナップショットは、少なくとも一部の人々においては、スナップショットではなくマテリアライズド・ビューと呼ばれるようになったことです。しかし、スナップショットはビューではありません。ビューは仮想的なものであり、スナップショットはそうではありません。そして、「マテリアライズド・ビュー」という用語は矛盾しています (少なくともモデルに関する限り)。さらに悪いことに、修飾語のない「ビュー」はしばしばマテリアライズド・ビューのみを意味するように解釈されるため、本来の意味でのビューを表す適切な用語が失われる危険性があります。
- ^ Oracle8i Tuning Release 8.1.5 . Ecst.csuchico.edu. 2012年2月9日閲覧。
- ^ 「マテリアライズドビュー - PostgreSQL wiki」 . wiki.postgresql.org . 2022年11月29日閲覧。
- ^ 「CREATE MATERIALIZED VIEW」 . PostgreSQLドキュメント. 2022年11月10日. 2022年11月29日閲覧。
- ^ 「REFRESH MATERIALIZED VIEW」 . PostgreSQLドキュメント. 2020年2月13日. 2022年11月29日閲覧。
- ^ 「マテリアライズド・ビュー」 。 2022年12月28日閲覧。
- ^ 「CMU DB Talk: Building Materialize」 。 2022年3月30日閲覧。
- ^ 「RisingWaveは次のApache Flinkか?」 www.singularity-data.com 2022年4月28日2022年6月30日閲覧。
- ^ 「ストリーミングSQLエンジンの構築方法」 。 2025年5月21日閲覧。
- ^マテリアライズド・ビュー – Sybase SQL Anywhere Archived 2009-12-14 at the Wayback Machine . Ianywhere.com. 2012年2月9日閲覧。
- ^ SQL Server 2005 のインデックス付きビューによるパフォーマンスの向上。Microsoft.com。2012年2月9日閲覧。
- ^ ClickHouseドキュメント MaterializedView . Clickhouse.yandex. 2019年9月5日閲覧。
- ^ MySQLにおけるマテリアライズドビューの実装. Shinguz.ch (2006年11月6日). 2012年2月9日閲覧。
- ^ Flexviews for MySQL – MySQLで増分更新可能なマテリアライズドビュー. Flexviews.sourceforge.net. 2012年2月9日閲覧。
- ^ 「リリースノート」 . Google.com. 2020年4月8日. 2021年7月21日閲覧。
- ^ Google BigQuery マテリアライズド ビューのドキュメントGoogle.com 2020 年 5 月 20 日に取得。