7

Oracle では、挿入のみのマテリアライズド ビューとは何ですか?

MAX集計関数を使用する次の具体化されたビューがあります。

CREATE MATERIALIZED VIEW VM_FAST_MAX
REFRESH FAST ON COMMIT
AS
SELECT   d.ID_INPUT, MAX(d.ID_LOAD) AS ID_LOAD, COUNT(*) AS CNT
FROM     MASTER_TABLE d
GROUP BY d.ID_INPUT;

『 Oracle Data Warehousing Guide』によると、これは挿入専用のマテリアライズド ビューである必要があります。

マテリアライズド ビューに次のいずれかがある場合、高速リフレッシュは従来の DML 挿入および直接ロードでのみサポートされます。

  • MIN または MAX 集計を含むマテリアライズド ビュー
  • SUM(expr) を持ち、COUNT(expr) を持たないマテリアライズド ビュー
  • COUNT(*) のないマテリアライズド ビュー

このようなマテリアライズド ビューは、挿入のみのマテリアライズド ビューと呼ばれます。

このようなマテリアライズドビューは、マスターテーブルに挿入する場合にのみ高速リフレッシュできると思います。代わりに、DBMS_MVIEW.EXPLAIN_MVIEWこの具体化されたビューは常に高速更新可能であることがわかります。

EXEC DBMS_MVIEW.EXPLAIN_MVIEW('VM_FAST_MAX');
SELECT CAPABILITY_NAME, POSSIBLE
FROM MV_CAPABILITIES_TABLE
WHERE MVNAME = 'VM_FAST_MAX';

CAPABILITY_NAME                P
------------------------------ -
REFRESH_FAST_AFTER_INSERT      Y
REFRESH_FAST_AFTER_ANY_DML     Y

また、コミット時の高速リフレッシュは、マスター テーブルの更新後でも機能します。

要点をまとめると:

  • 挿入のみのマテリアライズド ビューと、プレーンで高速に更新可能なマテリアライズド ビューの違いは何ですか?
  • Oracle のドキュメントが嘘をついているのはなぜですか? :)

Oracle 11.2 Enterprise Edition を使用。

4

1 に答える 1

2

通常の高速リフレッシュ可能な mview と挿入のみの mviewの違いは、あなたが言ったように、挿入のみのリフレッシュ可能な mview は、挿入ステートメネットの後にのみ高速リフレッシュでき、他の DML 操作 (削除や更新など) の後ではできないことです。

制限の背後にあるロジックは、既存の値を更新すると、オラクルは mlog テーブルだけでは、新しい最大値が何であるかを知る方法がないということだと思います (それを行うには、何らかのランクを維持する必要があります)。

機能表に関して - これは奇妙です。このページを確認してください-これは同じテストを行いましたが、彼らの例では彼らは得ました

Capable of:
  REFRESH_FAST
  REFRESH_FAST_AFTER_INSERT
Not Capable of:
  REFRESH_FAST_AFTER_ONETAB_DML
    AMT_SUM
    SUM(expr) without COUNT(expr)
  REFRESH_FAST_AFTER_ONETAB_DML
    COUNT(*) is not present in the select list
  REFRESH_FAST_AFTER_ANY_DML
    see the reason why REFRESH_FAST_AFTER_ONETAB_DML is disabled

更新後に高速更新を実行してみましたか?

于 2013-06-10T12:01:34.813 に答える