web-dev-qa-db-fra.com

Vue matérialisée prenant trop de temps

je crée une vue de la vue matérialisée rapide. Il faut près de 45 minutes pour créer mais il n'a pas rafraîchi dans 24 heures. Je l'ai essayé avec index et sans index. Je vérifie le journal de tous les enregistrements de table Max dans la table de journaux est de 2 lac. La requête est comme sous s'il vous plaît suggérer quels changements nécessaires

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

Votre matérialisation n'est pas définie avec un SUIVANT Clause, il ne sera donc rafraîchira que lorsque vous le demandez explicitement. Vous pouvez utiliser soit dbms_mview.refresh directement ou créer un groupe d'actualisation avec dbms_refresh .

Afin d'automatiser l'actualisation, vous pouvez programmer un travail avec DBMS_SCHEDULER ou DBMS_JOB (DBMS_JOB est obsolète en 11g).

Vous pouvez également définir votre MV avec une clause suivante, par exemple, cela rafraîchira le MV toutes les heures:

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