3

次のようなマテリアライズドビューがありますが、このマテリアライズドビューを「高速」で更新できるようにする方法があるかどうか疑問に思っています。基本的に、私は次のことを求めています。

  1. マテリアライズド・ビューにCOALESCE、NVL、NVL2などのOracle関数を含めても、高速で更新できますか?

  2. マテリアライズド・ビューには、私が作成した関数を含めることができますが、それでも高速で更新できます。

  3. マテリアライズドビューに派生テーブルへの結合を含めても、高速に更新できますか?

これについてOracleのドキュメントを確認しましたが、これらの制限はリストされていませんでしたが、以下のケースを自分のシステムでテストした後、それが可能であるとは思いませ

Oracleバージョン:10g

SELECT COALESCE (col1, col2),
       myOracleFunction(col3, col4)
  FROM tableA a 
       LEFT OUTER JOIN
       (SELECT   id, MAX (sample_key) prim_sam_key
            FROM table_sample
        GROUP BY id
          HAVING COUNT (1) = 1) b ON a.id = b.id;
4

1 に答える 1

2

あなたが不足しているあなたが提供したリンクからの要件:

  • COUNT(*)を指定する必要があります。
  • SELECTリストには、すべてのGROUPBY列が含まれている必要があります。

また、次の要件は、クエリの場合、高速更新は更新されている場合にのみ可能でtable_sampleあり、更新されていtableAないことを示しています。

  • 外部結合を使用したマテリアライズされた集計ビューは、外部テーブルのみが変更されている場合、従来のDMLおよび直接ロードの後ですばやく更新できます。また、内部結合テーブルの結合列に一意の制約が存在する必要があります。外部結合がある場合は、すべての結合をANDで接続し、等式(=)演算子を使用する必要があります。

最後に、マテリアライズド・ビューについて質問するときは、作成したマテリアライズド・ビューのログを正確に述べることをお勧めします。

于 2011-08-04T19:31:11.707 に答える