Qual è la differenza tra Visualizzazioni e Viste materializzate in Oracle?


Risposte:


355

Le viste materializzate sono basate su disco e vengono periodicamente aggiornate in base alla definizione della query.

Le viste sono solo virtuali ed eseguono la definizione della query ogni volta che si accede.


54
Inoltre, quando hai bisogno di prestazioni sui dati che non devono essere aggiornati alla seconda, le viste materializzate sono migliori, ma i tuoi dati saranno più vecchi che in una vista standard. Di solito i report di BI ottengono molti vantaggi dalle visualizzazioni materializzate.
Marthinus,

29
@Marthinus - che è corretto tranne nel caso di una visione materializzata che è AGGIORNAMENTO SU COMMIT - la MV restituirà esattamente i dati che sono stati impegnati.
Jeffrey Kemp,

2
Qual è il significato di DISK based? Significa che la tabella non fa parte di DISK? È memorizzato in un file e l'accesso a DISK è più veloce dell'accesso a File ....?
Kanagavelu Sugumar,

1
@KanagaveluSugumar Sì, anche le tabelle effettive vengono scritte sul disco.
Dacracot,

5
@dacracot Grazie! penso che intendi dire diverso dalle tabelle DB nel DISCO; questo MVIEW mantiene anche una tabella risolvendo tutti i join. In modo che nel runtime l'accesso alla singola tabella sia sufficiente; e non è necessario eseguire query su più tabelle per le condizioni di join, che di solito vengono eseguite dalla vista normale. Grazie!
Kanagavelu Sugumar,

332

Visualizzazioni

Valutano i dati nelle tabelle sottostanti la definizione della vista al momento della query della vista . È una vista logica delle tabelle, senza dati memorizzati altrove.

Il vantaggio di una vista è che ti restituirà sempre gli ultimi dati . Il rovescio della medaglia di una vista è che le sue prestazioni dipendono da quanto è buona un'istruzione select su cui si basa la vista. Se l'istruzione select utilizzata dalla vista unisce molte tabelle o utilizza join basati su colonne non indicizzate, la vista potrebbe non funzionare correttamente.

Viste materializzate

Sono simili alle viste normali, in quanto sono una vista logica dei tuoi dati (basata su un'istruzione select), tuttavia, il set di risultati della query sottostante è stato salvato in una tabella . Il lato positivo di questo è che quando si esegue una query su una vista materializzata, si esegue una query su una tabella , che può anche essere indicizzata.

Inoltre, poiché tutti i join sono stati risolti al momento dell'aggiornamento della vista materializzata, si paga il prezzo del join una volta (o tutte le volte che si aggiorna la vista materializzata), anziché ogni volta che si seleziona dalla vista materializzata. Inoltre, con la riscrittura delle query abilitata, Oracle può ottimizzare una query che seleziona dall'origine della vista materializzata in modo tale da poterla invece leggere dalla vista materializzata. In situazioni in cui si creano viste materializzate come forme di tabelle aggregate o come copie di query eseguite di frequente, ciò può accelerare notevolmente i tempi di risposta dell'applicazione dell'utente finale. Il rovescio della medaglia però è che i dati ottenuti dalla vista materializzata sono aggiornati solo l'ultima volta che la vista materializzata è stata aggiornata .


Le viste materializzate possono essere impostate per l'aggiornamento manuale, secondo una pianificazione prestabilita o in base al database che rileva una modifica dei dati da una delle tabelle sottostanti . Le viste materializzate possono essere aggiornate in modo incrementale combinandole con i log delle viste materializzate, che fungono da fonti di acquisizione dei dati di modifica nelle tabelle sottostanti.

Le viste materializzate vengono spesso utilizzate nelle applicazioni di data warehousing / business intelligence in cui l'esecuzione di query su tabelle fattuali di grandi dimensioni con migliaia di milioni di righe comporterebbe tempi di risposta alle query che si traducono in un'applicazione inutilizzabile.


Le viste materializzate aiutano anche a garantire un momento coerente nel tempo, simile all'isolamento dell'istantanea .


9
+1 per la spiegazione dettagliata, ma qual è il lato negativo della riscrittura delle query? Se la riscrittura delle query consentirà a Oracle di ottimizzare ulteriormente la query, dovremmo SEMPRE abilitare la riscrittura delle query, no?
Rosdi Kasim

6
@Rosdi, ha detto: "i dati che ricevi dalla vista materializzata sono aggiornati solo l'ultima volta che la vista materializzata è stata aggiornata"
Jeffrey Kemp,

49

Una vista utilizza una query per estrarre i dati dalle tabelle sottostanti.

Una vista materializzata è una tabella su disco che contiene il set di risultati di una query.

Le viste materializzate vengono utilizzate principalmente per aumentare le prestazioni dell'applicazione quando non è fattibile o desiderabile utilizzare una vista standard con indici applicati ad essa. Le viste materializzate possono essere aggiornate su base regolare tramite trigger o utilizzando l' ON COMMIT REFRESHopzione. Ciò richiede alcune autorizzazioni extra, ma non è nulla di complesso. ON COMMIT REFRESHè in atto almeno da Oracle 10.


Esiste un'opzione "AGGIORNA SU COMMIT" che può essere specificata in una vista materializzata
Hybris95

Grazie! Aggiornerò la risposta. Sai quando questa funzionalità è stata aggiunta a Oracle?
Jeremiah Peschka,

20

Le viste sono essenzialmente strutture logiche simili a tabelle popolate al volo da una determinata query. I risultati di una query della vista non vengono archiviati in alcun punto del disco e la vista viene ricreata ogni volta che viene eseguita la query. Le viste materializzate sono strutture effettive archiviate nel database e scritte su disco. Vengono aggiornati in base ai parametri definiti al momento della creazione.


Qual è il significato di DISK based? Significa che la tabella non fa parte di DISK? È memorizzato in un file e l'accesso a DISK è più veloce dell'accesso a File ....?
Kanagavelu Sugumar,

18

Vista materializzata : una tabella su un disco che contiene il set di risultati di una query

Vista non materata : una query che estrae i dati dalla tabella sottostante


7

Visualizza: la vista è solo una query denominata. Non memorizza nulla. Quando è presente una query sulla vista, esegue la query della definizione della vista. I dati effettivi provengono dalla tabella.

Viste materializzate: archivia i dati fisicamente e viene periodicamente aggiornata. Durante l'interrogazione di MV, fornisce dati da MV.


2

Aggiungendo alla risposta abbastanza approfondita di Mike McAllister ...

Le viste materializzate possono essere impostate per l'aggiornamento automatico solo attraverso il database che rileva le modifiche quando la query della vista è considerata semplice dal compilatore. Se è considerato troppo complesso, non sarà in grado di impostare quali sono essenzialmente i trigger interni per tenere traccia delle modifiche nelle tabelle di origine per aggiornare solo le righe modificate nella tabella mview.

Quando crei una vista materializzata, scoprirai che Oracle crea sia la mview sia una tabella con lo stesso nome , il che può creare confusione.


Le tabelle che supportano una vista materializzata non hanno lo stesso nome della vista.
Jeffrey Kemp,

@JeffreyKemp, sei sicuro? La risposta accettata qui stackoverflow.com/a/33552513 afferma diversamente. Anche se sì, questo potrebbe essere stato diverso nel 2010 quando hai commentato ...
Leqid

Il mio commento sopra deve essere stato su una versione precedente (probabilmente 9i). Hai ragione, gli MV ottengono un tavolo con lo stesso nome almeno nelle versioni moderne.
Jeffrey Kemp,

1

Le viste materializzate sono la vista logica dei dati guidata dalla query selezionata ma il risultato della query verrà archiviato nella tabella o nel disco, inoltre la definizione della query verrà archiviata anche nel database.

Le prestazioni della vista materializzata sono migliori della vista normale poiché i dati della vista materializzata verranno archiviati nella tabella e la tabella potrebbe essere indicizzata in modo più rapido per l'unione e anche il join viene eseguito al momento dell'aggiornamento delle viste materializzate, quindi non è necessario eseguire ogni volta il fuoco istruzione join come in caso di visualizzazione.

Altre differenze includono in caso di Vista otteniamo sempre i dati più recenti, ma in caso di Vista materializzata dobbiamo aggiornare la vista per ottenere i dati più recenti. In caso di visualizzazione materializzata abbiamo bisogno di un trigger aggiuntivo o di un metodo automatico in modo da poter mantenere MV aggiornato, questo non è necessario per le visualizzazioni nel database.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.