Разница между функцией SQL, возвращающей таблицу, и функцией выбора из таблицы

Я хочу знать, какой вариант лучше или быстрее и почему?

В основном я хочу создать функцию и реализовать некоторую логику, но у меня проблемы с производительностью. Я хочу понять, почему возврат таблицы в качестве переменной занимает больше времени, чем выбор.

CREATE FUNCTION [dbo].[ufn_GetID]  
(
    @Par BIT
)   
RETURNS TABLE 
AS RETURN
(
     Select * from dbo.Mytable where a=@Par
)
GO




or 

CREATE FUNCTION [dbo].[ufn_GetID]  
(
    @Par BIT
)  
RETURNS @Return Table 
( 
[Id] bigint  ,
[a] BIT  NULL
)
BEGIN

insert into @Return
Select * from dbo.Mytable where a=@Par

    RETURN
end       

Спасибо


person sublue    schedule 14.04.2020    source источник
comment
Найдите «Встроенная функция значений таблицы» (ITVF). По сути, это дает SQL Server больше возможностей для оптимизации, аналогично использованию представления (сервер SQL может расширять представление при создании плана запроса). Конечно, «лучше» зависит от пригодности, а «быстрее» зависит от контекста и не всегда имеет значение. Производительность ITVF по сравнению с TVF сильно зависит от их ИСПОЛЬЗОВАНИЯ; в частности, количество выполнений и пригодность оптимизации плана запроса.   -  person user2864740    schedule 14.04.2020
comment
Функции медленнее, чем просмотр (Select), но в SQL2019 оптимизируйте встроенный TVF - прочтите это, Helpful stackoverflow.com/questions/2554333/   -  person Amirhossein    schedule 14.04.2020