UDF är en svart ruta för frågeoptimeraren så den exekveras för varje rad. Du gör en rad-för-rad-markör. För varje rad i en tillgång, slå upp ett id tre gånger i en annan tabell. Det här händer när du använder skalära eller flerpåstående UDF:er (In-line UDF:er är helt enkelt makron som expanderar till den yttre frågan)
En av många artiklar om problemet är "Skalära funktioner, inlining och prestanda:En underhållande titel för ett tråkigt inlägg".
Underfrågorna kan optimeras för att korrelera och undvika rad-för-rad-operationer.
Vad du verkligen vill är detta:
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
Uppdatering februari 2019
SQL Server 2019 börjar åtgärda det här problemet.