UDF là một hộp đen đối với trình tối ưu hóa truy vấn, do đó nó được thực thi cho mọi hàng. Bạn đang thực hiện con trỏ theo từng hàng. Đối với mỗi hàng trong một nội dung, hãy tìm kiếm một id ba lần trong một bảng khác. Điều này xảy ra khi bạn sử dụng UDF vô hướng hoặc đa câu lệnh (UDF nội dòng chỉ đơn giản là macro mở rộng sang truy vấn bên ngoài)
Một trong nhiều bài viết về vấn đề này là "Hàm vô hướng, nội tuyến và hiệu suất:Một tiêu đề giải trí cho một bài viết nhàm chán".
Các truy vấn phụ có thể được tối ưu hóa để tương quan và tránh các hoạt động theo từng hàng.
Điều bạn thực sự muốn là:
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
Cập nhật tháng 2 năm 2019
SQL Server 2019 bắt đầu khắc phục sự cố này.