Sqlserver
 sql >> Base de données >  >> RDS >> Sqlserver

Pourquoi les vues indexées ne peuvent-elles pas avoir un agrégat MAX() ?

Ces agrégats ne sont pas autorisés car ils ne peuvent pas être recalculés uniquement sur la base 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é.

Autres agrégats, comme MIN() et MAX() , ne peut pas être recalculé simplement en regardant les données qui sont modifiées. Si vous supprimez la valeur qui est actuellement le max ou le min, alors le nouveau max ou min doit être recherché et trouvé dans l'entier table.

Le même principe s'applique aux 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 réanalyser la table entière pour obtenir la nouvelle valeur.