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

Unterschied zwischen einer Inline-Funktion und einer Ansicht

Nachdem ich viele der Antworten hier gelesen habe, möchte ich darauf hinweisen, dass es einen großen Unterschied zwischen einer Inline-Tabellenwertfunktion und jeder anderen Art von Funktion (skalare oder mehrzeilige TVF) gibt.

Ein Inline-TVF ist einfach eine parametrisierte Ansicht. Es kann wie eine Ansicht erweitert und optimiert werden. Es ist nicht erforderlich, irgendetwas zu materialisieren, bevor "Ergebnisse zurückgegeben werden" oder ähnliches (obwohl die Syntax leider ein RETURN hat .

Ein großer Vorteil, den ich bei einem Inline-TVF gegenüber einer Ansicht gefunden habe, ist, dass es die erforderliche Parametrisierung erzwingt, während Sie bei einer Ansicht davon ausgehen müssen, dass der Aufrufer der Ansicht angemessen beitritt oder die Verwendung der Ansicht einschränkt.

Zum Beispiel haben wir in DW viele große Faktentabellen mit einem typischen Kimball-Star-Modell. Ich habe einen Blick auf ein faktentabellenzentriertes Modell, das ohne Einschränkung aufgerufen wird und Hunderte Millionen Zeilen zurückgibt. Durch die Verwendung eines Inline-TVF mit entsprechender Parametrisierung können Benutzer nicht versehentlich nach allen Zeilen fragen. Die Leistung ist zwischen den beiden weitgehend nicht zu unterscheiden.