/ / Pourquoi les vues indexées ne peuvent-elles pas avoir un agrégat MAX ()? - serveur SQL, affichage, indexation, agrégat

Pourquoi les vues indexées ne peuvent-elles pas avoir un agrégat MAX ()? - serveur SQL, affichage, indexation, agrégat

J’ai essayé quelques vues d’index et je suis impressionné, mais j’ai presque toujours besoin d’un max ou d’un min et je ne peux pas comprendre pourquoi cela ne fonctionne pas, peut-on expliquer pourquoi?

Je sais qu'ils ne sont pas autorisés, je ne peux tout simplement pas comprendre pourquoi !!!

Réponses:

72 pour la réponse № 1

Ces agrégats ne sont pas autorisés car ils ne peuvent pas être recalculés uniquement en fonction des valeurs modifiées.

Certains agrégats, comme COUNT_BIG() ou SUM(), peut être recalculé simplement en regardant les données qui ont changé. Celles-ci sont autorisées dans une vue indexée car, si une valeur sous-jacente change, l'impact de cette modification peut être directement calculé.

D'autres agrégats, comme MIN() et MAX(), ne peut pas être recalculé simplement en regardant les données en cours de modification. Si vous supprimez la valeur qui correspond actuellement au maximum ou au minimum, le nouveau maximum ou le nouveau minimum doit être recherché et trouvé dans la liste. tout table.

Le même principe s’applique à d’autres agrégats, comme AVG() ou les agrégats de variation standard. SQL ne peut pas les recalculer uniquement à partir des valeurs modifiées, mais doit analyser de nouveau le tableau entier pour obtenir la nouvelle valeur.


4 pour la réponse № 2

Outre les raisons spécifiées par Remus, il existebesoin moins pratique de prendre en charge MIN et MAX. Contrairement à COUNT () ou à SUM (), MAX et MIN sont rapides à calculer - vous êtes tous configurés après une seule recherche; vous n’avez pas besoin de lire beaucoup de données.


1 pour la réponse № 3

Les fonctions d'agrégation telles que MIN / MAX ne sont pas prises en charge dans les vues indexées. Vous devez faire le MIN / MAX dans la requête entourant la vue.

Il existe une définition complète de ce qui est autorisé et non autorisé dans une vue indexée. ici (SQL 2005).
Citation:

Les types AVG, MAX, MIN, STDEV, STDEVP, VAR, ou VARPfonctions d'agrégat. Si AVG (expression) est spécifié dans requêtes référençant la vue indexée, l'optimiseur peut calculer fréquemment le résultat nécessaire si la vue est sélectionnée La liste contient SUM (expression) et COUNT_BIG (expression). Par exemple, un vue indexée SELECT liste ne peut pas contient l'expression AVG (colonne1). Si la liste de vues SELECT contient le expressions SUM (colonne1) et COUNT_BIG (colonne1), SQL Server peut calculer la moyenne pour une requête référence la vue et spécifie AVG (colonne1).