Sqlserver
 sql >> Base de Dados >  >> RDS >> Sqlserver

Por que as visualizações indexadas não podem ter um agregado MAX()?


Esses agregados não são permitidos porque não podem ser recalculados apenas com base nos valores alterados.

Alguns agregados, como COUNT_BIG() ou SUM() , pode ser recalculado apenas observando os dados que foram alterados. Eles são permitidos em uma exibição indexada porque, se um valor subjacente for alterado, o impacto dessa alteração poderá ser calculado diretamente.

Outros agregados, como MIN() e MAX() , não pode ser recalculado apenas observando os dados que estão sendo alterados. Se você excluir o valor que é atualmente o máximo ou mínimo, o novo máximo ou mínimo deve ser pesquisado e encontrado em todo tabela.

O mesmo princípio se aplica a outros agregados, como AVG() ou os agregados de variação padrão. O SQL não pode recalculá-los apenas a partir dos valores alterados, mas precisa verificar novamente a tabela inteira para obter o novo valor.