In SQL ci sono due tipi di viste:
Le normali View sono utili per astrarre la complessità, semplificare l'accesso, unire dati provenienti da diverse fonti. Non accelerano le query, poiché vengono sempre generate al volo.
Le Viste materializzate offrono un vantaggio in termini di prestazioni per report complessi e analisi, dove è importante non dover attendere ogni volta aggregazioni e join. Devono essere aggiornate manualmente o secondo un programma, affinché i dati non diventino obsoleti.
CREATE VIEW active_users AS SELECT id, name FROM users WHERE status = 'active';
CREATE MATERIALIZED VIEW active_users_agg AS SELECT country, COUNT(*) as cnt FROM users WHERE status = 'active' GROUP BY country; -- Per l'aggiornamento: REFRESH MATERIALIZED VIEW active_users_agg;
È possibile aggiornare i dati in una VIEW e come dipende dal tipo di VIEW?
Spesso si commette l'errore di considerare che le VIEW siano completamente identiche alle tabelle in termini di aggiornabilità. IN REALTÀ:
REFRESH, altrimenti si verifica una disallineamento dei dati.Storia 1
Un report BI è stato costruito tramite una normale VIEW con diversi JOIN e aggregati. Dopo un aumento del carico, il tempo di creazione del report è aumentato fino a decine di minuti. L'analista di sistema ha proposto una vista materializzata, riducendo istantaneamente il tempo a secondi, poiché i dati sono stati memorizzati in una tabella separata.
Storia 2
Uno sviluppatore, durante la migrazione a Oracle, ha tentato di eseguire un UPDATE tramite una normale VIEW, causando un errore: "view with group by is not updatable". La causa era l'uso di GROUP BY nella vista.
Storia 3
In una azienda dimenticavano di aggiornare la vista materializzata dopo l'importazione di nuovi dati, portando a un disallineamento tra i report di diversi utenti, poiché l'analisi lavorava con dati obsoleti provenienti da questa VIEW. Dopo hanno aggiunto un REFRESH automatico secondo un programma.