Migliorare le prestazioni delle query con le viste materializzate

Completato

Le viste materializzate sono query prescritte con join e filtri la cui definizione viene salvata e i risultati vengono salvati in modo permanente in un pool SQL dedicato. Non sono supportate per impostazione predefinita dai pool SQL serverless.

Le viste materializzate comportano un miglioramento delle prestazioni poiché i dati all'interno della vista possono essere recuperati senza dover risolvere la query sottostante sulle tabelle di base. È anche possibile applicare altri filtrare e integrare altre query come se si trattasse di una tabella. Inoltre, è possibile definire una distribuzione della tabella all'interno della definizione della vista materializzata diversa dalla tabella su cui si basa.

Di conseguenza, è possibile usare le viste materializzate per migliorare le prestazioni di query complesse o lente. Con la modifica dei dati nelle tabelle di base sottostanti, i dati nella vista materializzata verranno aggiornati automaticamente senza alcuna interazione da parte dell'utente.

Prima di definire una vista materializzata, è necessario tenere presenti alcune restrizioni:

  • L'elenco SELECT nella definizione della vista materializzata deve soddisfare almeno uno di questi due criteri:

    • L'elenco SELECT contiene una funzione di aggregazione.
    • Viene usata l'istruzione GROUP BY nella definizione della vista materializzata e tutte le colonne in GROUP BY vengono incluse nell'elenco SELECT. Nella clausola GROUP BY si possono usare fino a 32 colonne.
  • Le aggregazioni supportate includono MAX, MIN, AVG, COUNT, COUNT_BIG, SUM, VAR, STDEV.

  • Nella definizione sono supportate solo le distribuzioni hash e round_robin delle tabelle.

  • La vista materializzata supporta solo CLUSTERED COLUMNSTORE INDEX.

Di seguito è riportato un esempio di creazione di una vista materializzata denominata myview mediante una distribuzione hash e la selezione di due colonne da una tabella e il relativo raggruppamento.

create materialized view mview 
with(distribution=hash(col1)) 
as select col1, col2 from dbo.table group by col1, col2;