web-dev-qa-db-ja.com

表VSマテリアライズドビュー

これは、私が尋ねた前の質問に関連しています タイムスタンプ式を持つビュー (非マテリアル化されていない)ビューで情報を格納します。ユーザーがしているときにデータを格納してから取得する方法について説明します。

_CREATED MATERIALIZED VIEW mv AS SELECT person_id, name, NOW() as now FROM table
# is this more-or-less the same as:
# CREATED TABLE tb AS SELECT person_id, name, NOW() as now FROM table
#  "AND UPDATE EVERY..."
_

NOW()式は、格納する値として保存されている、またはマテリアライズドビューのクエリ時に評価された関数であるか。記憶域レベルである種の最適化/爽快感を持つテーブルと同じことをマテリアライズされたビューです、またはその上にボートがありませんか?

ここでのこの投稿は、(少なくとも最も説明的に話す)マテリアライズドビューをトリガーのテーブルとしてエミュレートできます. https://www.materialized.info/

9
David542

マテリアライズドビューは、マテリアライズド - すなわちPre評価されてディスク/メモリに書き込まれます。ビューと比較して貴重なことは、データへの高速で効率的なアクセスを可能にします。

たとえば、何百万行の行を持つ大きな複雑なクエリがある場合は、テーブルに参加して、アグリゲートまたはアグリゲート関数などを実行し、オンラインシステムユーザーが10秒待たなければならない場合は退屈になる傾向があります。 MVはこれを事前処理することを可能にします。 (たぶん一晩、数時間ごとなど)

これはもちろんテーブルにデータをコピーする手順で行うことができます。しかし、MVSはこの目的のために設定され、基礎となるテーブルで変更されたMV内の行の更新/挿入などの多くのスマートな最適化を持ちます。これは、必要に応じてMVをほぼ瞬時に更新できることを意味します。これらの追加機能は、プロシージャまたはトリガーにロジックを書くことをより適切にするかもしれません...しかし、手順はまだ行く良い方法です!

それでは、MVのような非常に似たものはトリガー/プロシージャーで書くことができますが、OracleがMVSをサポートしているときに不必要に複雑な方法である可能性があります。

0
Emu