UDF е черна кутия за оптимизатора на заявки, така че се изпълнява за всеки ред. Правите курсор ред по ред. За всеки ред в актив потърсете идентификатор три пъти в друга таблица. Това се случва, когато използвате скаларни или UDF с множество изрази (вградените UDF са просто макроси, които се разширяват във външната заявка)
Една от многото статии по проблема е „Скаларни функции, вграждане и производителност:Забавно заглавие за скучна публикация“.
Подзаявките могат да бъдат оптимизирани за корелация и избягване на операциите ред по ред.
Това, което наистина искате, е това:
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
Актуализация от февруари 2019 г.
SQL Server 2019 започва да отстранява този проблем.