Sqlserver
 sql >> Database >  >> RDS >> Sqlserver

Perché le viste indicizzate non possono avere un aggregato MAX()?

Questi aggregati non sono consentiti perché non possono essere ricalcolati esclusivamente in base ai valori modificati.

Alcuni aggregati, come COUNT_BIG() o SUM() , può essere ricalcolato semplicemente osservando i dati che sono cambiati. Questi sono consentiti all'interno di una vista indicizzata perché, se un valore sottostante cambia, l'impatto di tale modifica può essere calcolato direttamente.

Altri aggregati, come MIN() e MAX() , non può essere ricalcolato semplicemente guardando i dati che vengono modificati. Se elimini il valore che è attualmente il massimo o il minimo, il nuovo massimo o minimo deve essere cercato e trovato nell'intero tavolo.

Lo stesso principio si applica ad altri aggregati, come AVG() o gli aggregati di variazione standard. SQL non può ricalcolarli solo dai valori modificati, ma deve eseguire nuovamente la scansione dell'intera tabella per ottenere il nuovo valore.