De UDF is een zwarte doos voor de query-optimizer, dus het wordt voor elke rij uitgevoerd. U doet een rij-voor-rij-cursor. Zoek voor elke rij in een asset drie keer een id op in een andere tabel. Dit gebeurt wanneer u scalaire of multi-statement UDF's gebruikt (in-line UDF's zijn gewoon macro's die uitbreiden naar de buitenste query)
Een van de vele artikelen over het probleem is "Scalaire functies, inlining en prestaties:een vermakelijke titel voor een saaie post".
De subquery's kunnen worden geoptimaliseerd om te correleren en de bewerkingen per rij te vermijden.
Wat je echt wilt is dit:
SELECT
uc.id AS creator,
uu.id AS updater,
uo.id AS owner,
a.[name]
FROM
asset a
JOIN
user uc ON uc.user_pk = a.created_by
JOIN
user uu ON uu.user_pk = a.updated_by
JOIN
user uo ON uo.user_pk = a.owned_by
Update februari 2019
SQL Server 2019 begint dit probleem op te lossen.