/ / Perché le viste indicizzate non possono avere un aggregato MAX ()? - sql-server, visualizzazione, indicizzazione, aggregazione

Perché le viste indicizzate non possono avere un aggregato MAX ()? - sql-server, visualizzazione, indicizzazione, aggregazione

Ho provato alcune visualizzazioni di indice e sono impressionato, ma ho quasi sempre bisogno di un massimo o di un minimo e non riesco a capire perché non funziona con questi, qualcuno può spiegare perché?

So che non sono ammessi, non riesco a capire perché !!! Il conteggio ecc. È permesso perché non MIN / MAX, sto cercando una spiegazione ...

risposte:

72 per risposta № 1

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

Alcuni aggregati, come COUNT_BIG() o SUM(), può essere ricalcolato semplicemente osservando i dati modificati. 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 osservando i dati che vengono modificati. Se elimini il valore che è al momento il massimo o il minimo, allora il nuovo massimo o il minimo devono essere cercati e trovati nel file 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 rieseguire la scansione dell'intera tabella per ottenere il nuovo valore.


4 per risposta № 2

Oltre alle ragioni specificate da Remus, c'èmeno pratica necessità di supportare MIN e MAX. A differenza di COUNT () o SUM (), MAX e MIN sono veloci da calcolare - si è tutti impostati dopo una sola ricerca; non hai bisogno di leggere molti dati


1 per risposta № 3

Le funzioni di aggregazione come MIN / MAX non sono supportate nelle viste indicizzate. Devi eseguire il MIN / MAX nella query che circonda la visualizzazione.

C'è una definizione completa su ciò che è e non è consentito all'interno di una vista indicizzata Qui (SQL 2005).
Citazione:

AVG, MAX, MIN, DEV.ST, DEV.STP, VAR, o VARPfunzioni aggregate. Se AVG (espressione) è specificato in query che fanno riferimento alla vista indicizzata, l'ottimizzatore può calcolare frequentemente il risultato necessario se la vista seleziona lista contiene SUM (espressione) e COUNT_BIG (espressione). Ad esempio, a vista indicizzata lista SELECT non può contenere l'espressione AVG (colonna1). Se la vista lista SELECT contiene il espressioni SUM (colonna1) e COUNT_BIG (colonna1), SQL Server can calcolare la media per una query che fa riferimento alla vista e specifica AVG (Colonna1).