Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

Warum können indizierte Ansichten kein MAX()-Aggregat haben?

Diese Aggregate sind nicht zulässig, da sie allein aufgrund der geänderten Werte nicht neu berechnet werden können.

Einige Aggregate, wie COUNT_BIG() oder SUM() , kann neu berechnet werden, indem man sich einfach die geänderten Daten ansieht. Diese sind in einer indizierten Ansicht zulässig, da die Auswirkungen dieser Änderung direkt berechnet werden können, wenn sich ein zugrunde liegender Wert ändert.

Andere Aggregate wie MIN() und MAX() , kann nicht neu berechnet werden, indem nur die geänderten Daten betrachtet werden. Wenn Sie den Wert löschen, der aktuell das Maximum oder Minimum ist, dann muss das neue Maximum oder Minimum im Gesamt gesucht und gefunden werden Tisch.

Das gleiche Prinzip gilt für andere Aggregate wie AVG() oder die Standardvariationsaggregate. SQL kann sie nicht nur aus den geänderten Werten neu berechnen, sondern muss die gesamte Tabelle erneut scannen, um den neuen Wert zu erhalten.