sql >> データベース >  >> RDS >> Oracle

Oracle-FASTREFRESHとJOINSを使用してマテリアライズドビューを作成する方法

    まず、 『Oracle Databaseデータウェアハウスガイド』から:

    結合のみのマテリアライズドビューの高速更新に関する制限

    ...

    • FROMリスト内のすべてのテーブルのROWIDは、クエリのSELECTlistに表示される必要があります。

    これは、ステートメントが次のようになる必要があることを意味します:

    CREATE MATERIALIZED VIEW MV_Test
      NOLOGGING
      CACHE
      BUILD IMMEDIATE 
      REFRESH FAST ON COMMIT 
      AS
        SELECT V.*, P.*, V.ROWID as V_ROWID, P.ROWID as P_ROWID 
        FROM TPM_PROJECTVERSION V,
             TPM_PROJECT P 
        WHERE P.PROJECTID = V.PROJECTID
    

    注意すべきもう1つの重要な側面は、マテリアライズド・ビュー・ログをwith rowidとして作成する必要があることです。 。

    以下は機能テストのシナリオです:

    CREATE TABLE foo(foo NUMBER, CONSTRAINT foo_pk PRIMARY KEY(foo));
    
    CREATE MATERIALIZED VIEW LOG ON foo WITH ROWID;
    
    CREATE TABLE bar(foo NUMBER, bar NUMBER, CONSTRAINT bar_pk PRIMARY KEY(foo, bar));
    
    CREATE MATERIALIZED VIEW LOG ON bar WITH ROWID;
    
    CREATE MATERIALIZED VIEW foo_bar
      NOLOGGING
      CACHE
      BUILD IMMEDIATE
      REFRESH FAST ON COMMIT  AS SELECT foo.foo, 
                                        bar.bar, 
                                        foo.ROWID AS foo_rowid, 
                                        bar.ROWID AS bar_rowid 
                                   FROM foo, bar
                                  WHERE foo.foo = bar.foo;
    


    1. 同じアクセス方法でデッドロックが発生する可能性はありますか?

    2. mySQL replace()を使用して複数のレコードの文字列を置き換えるにはどうすればよいですか?

    3. 2つのクエリの結果を1つのデータセットに結合する方法

    4. SQLServerデータベース内のシステムテーブルの数をカウントする3つの方法