UDF jest czarną ramką dla optymalizatora zapytań, więc jest wykonywany dla każdego wiersza. Robisz kursor wiersz po wierszu. Dla każdego wiersza w zasobie poszukaj identyfikatora trzy razy w innej tabeli. Dzieje się tak, gdy używasz skalarnych lub wieloinstrukcyjnych funkcji UDF (wbudowane UDF to po prostu makra, które rozszerzają się na zewnętrzne zapytanie)
Jednym z wielu artykułów na ten temat jest „Funkcje skalarne, wstawianie i wydajność:zabawny tytuł nudnego posta”.
Podzapytania można zoptymalizować w celu skorelowania i uniknięcia operacji wiersz po wierszu.
To, czego naprawdę chcesz, to:
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
Zaktualizuj luty 2019
SQL Server 2019 zaczyna naprawiać ten problem.