sql >> Base de Datos >  >> RDS >> Sqlserver

¿Por qué las vistas indexadas no pueden tener un agregado MAX()?

Estos agregados no están permitidos porque no se pueden volver a calcular únicamente en función de los valores modificados.

Algunos agregados, como COUNT_BIG() o SUM() , se puede volver a calcular simplemente mirando los datos que cambiaron. Estos están permitidos dentro de una vista indexada porque, si un valor subyacente cambia, el impacto de ese cambio se puede calcular directamente.

Otros agregados, como MIN() y MAX() , no se puede volver a calcular simplemente mirando los datos que se están cambiando. Si elimina el valor que actualmente es el máximo o mínimo, entonces el nuevo máximo o mínimo debe buscarse y encontrarse en todo mesa.

El mismo principio se aplica a otros agregados, como AVG() o los agregados de variación estándar. SQL no puede volver a calcularlos solo a partir de los valores modificados, sino que necesita volver a escanear toda la tabla para obtener el nuevo valor.