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

Wird die Verwendung einer Funktion zur Vereinfachung der SQL-Abfrage die Leistung massiv beeinträchtigen?

Normalerweise auswählen ein Ergebnis einer Skalarfunktion wird nicht viel schaden, aber Filtern dadurch kann es leicht Hunderte von Sekunden kosten (jedoch nicht unbedingt).

Wenn Sie nach dem Ergebnis einer Skalarfunktion filtern müssen (WHERE col = dbo.scalar_function() ), hilft es oft, stattdessen eine Inline-Tabellenwertfunktion zu erstellen. Es würde seinen Wert als einzige Zeile der Ergebnistabelle zurückgeben. Sie würden dann inner join ausführen mit dem Funktionsergebnis, wodurch effektiv nach dem zurückgegebenen Wert gefiltert wird. Dies funktioniert, weil SQL Server immer in der Lage ist, Inline-Tabellenwertfunktionen abzuwickeln und sie in die aufrufende Abfrage einzubetten.

Beachten Sie, dass dieser Trick nicht funktioniert, wenn die Funktion mehrstufig ist. Diese können nicht rückgängig gemacht werden.