Kann eine Inline-UDF mit Tabellenwerten die entsprechende skalare UDF in einer SELECT-Spaltenliste übertreffen?

Diese Frage erwuchs ausSQLServer: Warum sollten Sie benutzerdefinierte Funktionen mit Tabellenwerten vermeiden?. In einigen Kommentaren begann ich Fragen zu stellen, und die Antworten auf meine Kommentare wurden vom Thema verschoben.

Damit Sie nicht die gesamte Diskussion lesen müssen: Ich hatte noch nie gehört, dass benutzerdefinierte Funktionen (UDF) langsam sind oder vermieden werden müssen. Einige Links wurden in der oben genannten Frage gepostet, um zu veranschaulichen, dass sie langsam waren. Ich habe es immer noch nicht verstanden und nach einem Beispiel gefragt. Ein Beispiel wurde veröffentlicht, und der Leistungsunterschied war enorm.

Ich kann nicht die einzige Person sein, die nicht wusste, dass es einen so großen Leistungsunterschied geben könnte. Ich hatte das Gefühl, dass diese Tatsache in eine neue Frage und Antwort getrennt werden sollte, um die Chancen zu verbessern, gefunden zu werden. Das hier ist die "Frage". Bitte schließen Sie noch nicht, da ich dem Antwortenden Zeit geben möchte, die Antwort zu posten.

Natürlich sollten auch andere Antworten oder Beispiele posten. Ich würde besonders alles schätzen, das mir helfen würde, zu verstehenWarum Der Leistungsunterschied ist so groß.

Beachten Sie auch, dass ich nicht über die Verwendung einer UDF in einer WHERE-Klausel spreche. Mir ist bewusst, wie dies den Optimierer daran hindern kann, seine Arbeit zu erledigen. Ich bin speziell an Leistungsunterschieden interessiert, als die ursprüngliche UDF Teil der SELECT-Spaltenliste war.

Antworten auf die Frage(2)

Ihre Antwort auf die Frage