web-dev-qa-db-ja.com

ビューとマテリアライズドビューの違いは何ですか

PostgreSQLマテリアライズドビューとMySQLビューの違いは何ですか?

2
SujithTee

VIEW はストアドクエリです。そこから選択すると、基本的にクエリが実行されます。

CREATE VIEW foo
AS
  SELECT col1,col2
  FROM bar;

本質的に

SELECT foo.*
FROM (
  SELECT col1,col2
  FROM bar
) AS foo;

マテリアライズドビューは、多かれ少なかれ、ディスクにキャッシュ(またはマテリアライズ)されるビューです。

CREATE IF NOT EXISTS TABLE foo
AS
  SELECT col1,col2
  FROM bar;

少なくともPostgresSQLには、コマンド REFRESH MATERIALIZED VIEW ビューの名前をフィードでき、それを最初から再生成します:REFRESH MATERIALIZED VIEW foo;

2
Evan Carroll

これはMySQLにのみ適用されます...

MySQLにはマテリアライズドビューがありません。

MySQLはVIEWを、それを使用するクエリに結合します。つまり、VIEWが定義されているときに静的に行われるのではなく、クエリごとに動的に最適化を行うことができます。 2つの主要な最適化があります:MERGETEMPTABLE5.7 View Algorithms を参照してください。

MERGEは、VIEWの定義と問題のクエリをブレンドし、、次に最適化すると考えてください。

TEMPTABLEMERGEをパントするものと考え、VIEWの結果を含む一時テーブルを(スタンドアロンのSELECTであるかのように)作成するだけです。問題のクエリでその一時テーブルを使用します。

結論として、VIEWは「構文糖」であり、パフォーマンスツールではありません。 mergeもtemptableも、同等のものを手動で実行するよりも優れたパフォーマンスを提供できません。

「マテリアライズドビュー」は、それらを実行するための単一の「最良の」方法がないため、おそらくMySQLには存在しません。私の サマリーテーブルに関するディスカッション では、MySQLのマテリアライズドビューを拡張するための6つの方法を挙げています。それぞれに長所と短所があります。 (注:MySQLはマテリアライズドビューの構文を提供しません。youすべての作業を行います。)

1
Rick James

マテリアライズドビューは、クエリの結果を含むデータベースオブジェクトです。たとえば、リモートにあるデータのローカルコピーであったり、テーブルや結合結果の行や列のサブセットであったり、集計関数を使用した要約であったりします。

PostgreSQLはマテリアライズドビューと一時テーブルをサポートしていますが、MySQLは一時テーブルをサポートしていますが、マテリアライズドビューはサポートしていません。違いは、MySQLビューはクエリを使用して基になるテーブルからデータをプルするのに対し、PostgreSQLマテリアライズドビューはクエリの結果セットを含むディスク上のテーブルであることです。

RDBMモデルでは、ビューはデータベースクエリの結果を表す仮想テーブルです。クエリまたは更新が通常のビューの仮想テーブルを処理するときはいつでも、DBMSはこれらを基になる基本テーブルに対するクエリまたは更新に変換します。マテリアライズドビューのアプローチは異なります。クエリ結果は、ビューではなく具象(「マテリアライズ」)テーブルとしてキャッシュされ、元のベーステーブルから随時更新される可能性があります。これにより、追加のストレージと一部のデータが古くなる可能性があるという犠牲を払って、はるかに効率的なアクセスが可能になります。マテリアライズドビューは、実際のベーステーブルの頻繁なクエリにコストがかかる可能性のあるデータウェアハウジングのシナリオで特に役立ちます。

0
Nditah