Mir ist klar, dass dies eine sehr alte Frage ist, aber ich sehe einen entscheidenden Aspekt in keiner der Antworten erwähnt: Inlining in den Abfrageplan.
Funktionen können sein...
-
Skalar:
CREATE FUNCTION ... RETURNS scalar_type AS BEGIN ... END
-
Mehrsätzige Tabelle-bewertet:
CREATE FUNCTION ... RETURNS @r TABLE(...) AS BEGIN ... END
-
Inline-Tabelle-bewertet:
CREATE FUNCTION ... RETURNS TABLE AS RETURN SELECT ...
Die dritte Art (inline table-valued) wird vom Abfrageoptimierer im Wesentlichen wie (parametrisierte) Views behandelt, was bedeutet, dass der Verweis auf die Funktion in Ihrer Abfrage dem Kopieren des SQL-Körpers der Funktion (ohne tatsächliches Kopieren) ähnelt, was zu den folgenden Vorteilen führt:
- Der Abfrageplaner kann die Ausführung der Inline-Funktion genauso optimieren wie jede andere Unterabfrage (z. B. unbenutzte Spalten eliminieren, Prädikate nach unten schieben, andere JOIN-Strategien wählen usw.).
- Bei der Kombination mehrerer Inline-Funktionen ist es nicht erforderlich, das Ergebnis der ersten Funktion zu materialisieren, bevor es an die nächste weitergegeben wird.
Dies kann zu erheblichen Leistungseinsparungen führen, insbesondere bei der Kombination mehrerer Funktionsebenen.
HINWEIS: Es sieht so aus, als würde SQL Server 2019 eine Form von Inlining skalarer Funktionen auch.
6 Stimmen
venkatsqlinterview.blogspot.com/2011/05/
1 Stimmen
wiki.answers.com/Q/
1 Stimmen
searchsqlserver.techtarget.com/tip/
3 Stimmen
Wie sieht es mit der Geschwindigkeit aus? Wer führt die gleiche Abfrage schneller aus?
0 Stimmen
Es ist erwähnenswert, dass SP Transaktionen erstellen kann, während die Funktion nicht