0Pricing
SQL Academy · Lezione

Viste materializzate e strategie di REFRESH

Renda persistente il risultato di una query costosa con MATERIALIZED VIEW e lo aggiorni secondo una pianificazione o su richiesta.

Viste materializzate e strategie di REFRESH è una lezione SQL Academy gratuita su CoddyKit. Questa è la lezione 3 di 4. Puoi leggere la lezione completa qui gratuitamente — poi esercitati direttamente nel browser con un editor di codice integrato e un tutor IA disponibile 24/7. Fa parte del percorso di apprendimento SQL Academy, e i tuoi progressi si sincronizzano tra il web e l'app CoddyKit. Il corso SQL Academy include 4 lezioni in totale.

Vista materializzata = risultato salvato

A differenza di una vista normale, una vista materializzata memorizza su disco il risultato della propria SELECT. Le query accedono ai dati memorizzati, quindi sono veloci. Il risultato viene aggiornato su richiesta.

CREATE MATERIALIZED VIEW daily_revenue AS
SELECT date_trunc('day', created_at) AS day,
       SUM(total) AS revenue
FROM orders
GROUP BY 1;

Interrogazione

Le query sono semplici SELECT sui dati materializzati:

SELECT * FROM daily_revenue WHERE day >= NOW() - INTERVAL '30 days';

REFRESH MATERIALIZED VIEW

Ricalcola il risultato. Blocca la vista in modo esclusivo:

REFRESH MATERIALIZED VIEW daily_revenue;
-- Selects on the view block during refresh.

REFRESH MATERIALIZED VIEW CONCURRENTLY

Aggiornamento non bloccante: i lettori continuano a ricevere i vecchi dati finché quelli nuovi non sono pronti. Richiede un indice univoco sulla vista:

CREATE UNIQUE INDEX ON daily_revenue (day);

REFRESH MATERIALIZED VIEW CONCURRENTLY daily_revenue;

Indici sulle viste materializzate

Può indicizzare una vista materializzata come una qualsiasi tabella, velocizzando le query:

CREATE INDEX daily_revenue_day_idx ON daily_revenue (day DESC);

Quando materializzare

Utilizzi le viste materializzate quando:

  • La query sottostante è costosa
  • Il risultato può essere leggermente obsoleto
  • La query viene eseguita molte volte tra un aggiornamento e l'altro

Aggiornamento pianificato

Non esiste uno scheduler integrato. Utilizzi pg_cron, un cron job del sistema operativo oppure lo scheduler dell'applicazione:

-- Via pg_cron extension:
SELECT cron.schedule('refresh_daily', '0 1 * * *', 'REFRESH MATERIALIZED VIEW CONCURRENTLY daily_revenue;');

Aggiornamento incrementale

PostgreSQL non dispone di un aggiornamento incrementale nativo: ogni REFRESH ricalcola tutto da zero. Per l'aggregazione incrementale, consideri:

  • «Tabelle di riepilogo» basate su trigger e realizzate manualmente
  • Aggregazioni continue di TimescaleDB
  • L'estensione pg_ivm (viste materializzate incrementali)

Lettura delle tabelle sottostanti senza influire sulle letture

L'aggiornamento CONCURRENT legge le tabelle sottostanti in uno snapshot della transazione, senza bloccarle. Tuttavia, l'aggiornamento stesso può essere lento su dati di grandi dimensioni.

Utilizzo del disco

Una vista materializzata raddoppia lo spazio occupato dai propri dati. Pianifichi di conseguenza lo spazio su disco.

Combinazione con il partizionamento

Per serie temporali molto grandi, partizioni la vista materializzata oppure utilizzi TimescaleDB:

CREATE MATERIALIZED VIEW orders_summary AS ... ;
CREATE INDEX ON orders_summary (day);
-- For very large views, consider regular table + manual upsert pattern.

Quando non utilizzarle

Se le letture possono utilizzare SQL sui dati aggiornati e la query sottostante è già veloce, eviti la manutenzione degli aggiornamenti. Le viste materializzate sono un compromesso: dati obsoleti in cambio di velocità.

Riepilogo

Le viste materializzate memorizzano nella cache i risultati delle query.

  • Memorizzate su disco, indicizzate e veloci
  • REFRESH manuale o pianificato
  • CONCURRENTLY richiede un indice UNIQUE
  • Utili per aggregazioni costose e leggermente obsolete

Verifica rapida

Che cosa richiede REFRESH MATERIALIZED VIEW CONCURRENTLY, ma non il REFRESH di base?

Domande Frequenti

La lezione «Viste materializzate e strategie di REFRESH» è gratuita?

Sì — il testo completo di «Viste materializzate e strategie di REFRESH» è gratuito qui sul web. Per esercitarvi in modo interattivo (un editor di codice integrato e un tutor IA 24/7) e sbloccare il resto del corso SQL Academy, passa a CoddyKit PRO. Il corso SQL Academy include 4 lezioni in totale.

Cosa imparerò in «Viste materializzate e strategie di REFRESH»?

Renda persistente il risultato di una query costosa con MATERIALIZED VIEW e lo aggiorni secondo una pianificazione o su richiesta. Eserciti SQL Academy con codice pratico che esegui direttamente nel browser, e un tutor IA 24/7 risponde alle tue domande mentre lavori sulla lezione.

Ho bisogno di esperienza per iniziare SQL Academy?

Non è richiesta alcuna esperienza precedente. SQL Academy su CoddyKit è strutturato per principianti e studenti avanzati, quindi puoi iniziare da qui o dall'inizio e procedere al tuo ritmo. Questa è la lezione 3 di 4.

Quanto tempo richiede la lezione «Viste materializzate e strategie di REFRESH»?

La maggior parte delle lezioni CoddyKit richiede circa 5–10 minuti. Ogni lezione è breve e interattiva, quindi fai progressi costanti e riprendi esattamente da dove hai lasciato su web e app.

Posso scrivere ed eseguire codice in questa lezione SQL Academy?

Sì. Ogni lezione SQL Academy include un editor di codice integrato, quindi scrivi ed esegui codice reale direttamente nel tuo browser e ricevi feedback istantaneo dall'IA — nessuna configurazione locale necessaria.

Tutte le lezioni di questo corso

  1. Viste semplici: riutilizzo logico
  2. Viste aggiornabili e trigger INSTEAD OF
  3. Viste materializzate e strategie di REFRESH
  4. Quando preaggregare
← Torna a SQL Academy