web-dev-qa-db-ja.com

マテリアライズドビューに時間がかかりすぎる

マテリアライズドビューを作成して高速リフレッシュします。作成には約45分かかりますが、24時間で更新されませんでした。インデックス付きとインデックスなしで試してみました。ログテーブルのすべてのテーブルの最大レコードのログが2 lacであることを確認します。クエリは次のとおりです必要な変更を提案してください

CREATE MATERIALIZED VIEW LOG ON a WITH ROWID,   SEQUENCE (COLUMN USED FROM THIS TABLE)
/
CREATE MATERIALIZED VIEW LOG ON P WITH ROWID,   SEQUENCE (COLUMN USED FROM THIS TABLE)
/
CREATE MATERIALIZED VIEW LOG ON PG WITH ROWID,  SEQUENCE (COLUMN USED FROM THIS TABLE)
/
CREATE MATERIALIZED VIEW LOG ON PN WITH ROWID, SEQUENCE (COLUMN USED FROM THIS TABLE))
/ 
CREATE MATERIALIZED VIEW LOG ON AP WITH ROWID
/
CREATE  MATERIALIZED VIEW C_INFO 
NOLOGGING
BUILD IMMEDIATE
refresh fast with rowid 
on demand
AS
SELECT  
   A.ROWID ACTROWID , P.ROWID PREMROWID, 
   PG.ROWID PGROWID,AP.ROWID APROWID, PN.ROWID PNROWID,
   ...
FROM     A,    P,   pg,    ap, pn      
WHERE   
        p.id             =  pg.id (+)
    and pg.columname  (+)=  'Value' 
...
2
hafiz zahid

マテリアライズは [〜#〜] next [〜#〜] 句で定義されていないため、明示的に要求した場合にのみ更新されます。 DBMS_MVIEW.REFRESH を直接使用するか、または DBMS_REFRESH でリフレッシュグループを作成できます。

更新を自動化するために、 DBMS_SCHEDULER または DBMS_JOB を使用してジョブをプログラムできます(dbms_jobは11gでは非推奨です)。

NEXT句を使用してMVを定義することもできます。たとえば、これはMVを1時間ごとに更新します。

CREATE MATERIALIZED VIEW  C_INFO 
NOLOGGING
BUILD IMMEDIATE
refresh fast with rowid 
on demand
NEXT sysdate + 1/24
4
Vincent Malgrat