UDF je černá skříňka optimalizátoru dotazů, takže se provádí pro každý řádek. Provádíte kurzor po řádku. Pro každý řádek v aktivu vyhledejte ID třikrát v jiné tabulce. K tomu dochází, když používáte skalární nebo vícepříkazové UDF (In-line UDF jsou jednoduše makra, která expandují do vnějšího dotazu)
Jedním z mnoha článků o tomto problému je „Skalární funkce, vkládání a výkon:Zábavný název pro nudný příspěvek“.
Dílčí dotazy lze optimalizovat tak, aby korelovaly a vyhnuly se operacím řádek po řádku.
To, co opravdu chcete, je toto:
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
Aktualizace z února 2019
SQL Server 2019 začíná tento problém opravovat.